Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas Con Un Algoritmo

Iniciado por pbarros, 10 de Mayo de 2006, 08:53:14 PM

« anterior - próximo »

zupervaca

 No hay que guardar nada, la solucion es plantear el problema como si fuera un mapa de tiles, es decir, calcular las zonas de colision o zonas calientes de la misma manera que se calcula en que tile estas en un mapas de tiles, con las formulas que te puse antes puedes hacerlo, no obstante dependiendo de uno u otros casos puedes hacer menos calculos.

 No tengo interés en discutir como es mejor, ya que para cada caso y para cada programador es mejor de una forma u otra pero voy a explicar un poco mejor mi propuesta anterior a pbarros.

Tienes una matriz de puntos separados a una determinada distancia, donde cada uno se le puede identificar por su fila/columna.

Para saber a que columna pertenece se haría esta operación.

NumColumna = CursorX / AnchoColumna

y para saber la posición (el punto que buscas) de esa columna:

PuntoX = NumColumna * AnchoColumna

Ahora surge el problema que tenías anteriormente cuando la posición aparecía desplazada, y es porque la celda no debe estar entre punto y punto si no que debe estar justo en el centro del punto, ese desplazamiento es igual a la mitad del ancho de la celda, por lo que la corrección se hace al comienzo.

NumColumna = ( CursorX + AnchoColumna/2 )/ AnchoColumna

y ya está, no tiene más, para las filas hay que hacer la misma operación pero usando las Y.

Si por la razón que sea el comienzo de la matriz de puntos no tiene su origen en el la coordenada 0,0 (creo que la tuya empezaba en 100,100) hay que corregir la posición del cursor al obtener la fila/columna.

NumColumna = (CursorX + AnchoColumna/2 - InicioMatrizX)/ AnchoColumna

y por su puesto la posición donde está el punto que corresponde con la columna también lleva el desplazamiento

PuntoX = InicioMatrizX + ( NumColumna * AnchoColumna )

ya conocemos la posición del punto buscado, el más cercano al cursor del ratón, se puede seleccionar directamente, o si se desea se puede comparar su proximidad o selección de la forma que queramos, cuadrada, circular, con una máscara o como sea.

Si quieres saber si el cursor no ha seleccionado una fila/columna válida puedes comprobar que estas no sean menor de cero y que no sea mayor del máximo de filas/columnas.

Si no te interesa el número de columna se puede juntar todo en esta fórmula, es lo único que necesitas.

PuntoX = InicioMatrizX + ( (CursorX + AnchoColumna/2 - InicioMatrizX)/ AnchoColumna * AnchoColumna )

Ahora, si quieres aprender a usar tiles para hacerlo, adelante, pero tampoco está demás saber hacerlo sin usar tiles que por cierto, a mi no me parece que sean tan fáciles.

ZüNdFoLGe

Cita de: "Guest"Ahora, si quieres aprender a usar tiles para hacerlo, adelante, pero tampoco está demás saber hacerlo sin usar tiles que por cierto, a mi no me parece que sean tan fáciles.
Tu matriz es un mapa de tiles  :)  

marcode

 Quiero aclarar que al obtener el punto buscado de esta forma

PuntoX = CursorX / AnchoColumna * AnchoColumna

Hay que hacerlo con número enteros, porque si no, devolvería el mismo punto donde está el cursor.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

marcode

Cita de: "ZüNdFoLGe"
Cita de: "Guest"Ahora, si quieres aprender a usar tiles para hacerlo, adelante, pero tampoco está demás saber hacerlo sin usar tiles que por cierto, a mi no me parece que sean tan fáciles.
Tu matriz es un mapa de tiles  :)
Pero no lo trato como tal.

Imagino que cada uno tendrá su forma mejor de hacerlo, a mi lo de hacer comprobaciones sobre celdas imaginarias no me hace mucho.

Se me haría muy difícil el aclararme si la matriz tuviera por ejemplo zoom o rotase, o hacer otros tipos de selección, etc.

Vamos, que no me parece a mi tan fácil el manejar los tiles, pero no voy a discutir si a otro le parece mejor o a pbarros le va a ser más fácil, no lo sé.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

sés

 Aquí nadie ha dicho que haya que hacer ningún mapa de tiles, sólo que es lo mismo:
Cita de: "sés"No he leído todas las respuestas, pero si los puntos están a la misma distancia unos de otros... eh... es un simple mapa de TILES de toda la vida en el que cada punto sería el centro de un tile.

int tilex = ratonx / ANCHO_TILE_X;
int tiley = ratony / ALTO_TILE_Y;


Luego sólo habría que calcular la distancia al centro de ese tile para ver si se sibuja el círculo o no.

Que es exactamente lo que ha dicho "Guest".
Soy indeciso... ¿o no?

imaGame

 Es un simple mapa de tiles. Estoy con Ses.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.