Dibujo un mapa isométrico con el mosaico 64x32 :
const Offset = 160;
int X, Y;
for (int a=0; a < 6; a++)
for (int b=0; b < 6; b++) {
X = a * 32 - b * 32 + Offset;
Y = a * 16 + b * 16;
DrawTile(X, Y, tile);
}
Imagen, que ilustra este código:
Estimados profesionales, por favor, ayuden con una fórmula de transformación de coordenadas de ratón en índices isométricos de una célula. Ejemplo: (105; 100) -> [1; 4].
mathematics
algorithm
isometric
Alexan-Dwer
fuente
fuente
while(val = arr[i++])
construcciones similares, no lo use . Uso++a
y en su++b
lugar.Respuestas:
Debe determinar la matriz de transformación de las coordenadas del espacio de mosaico a las coordenadas del espacio de pantalla, luego calcular la matriz inversa para esto, que cuando se aplica a las coordenadas del espacio de pantalla las transforma a las del espacio de mosaico.
Caso específico
Lo que básicamente está haciendo para transformar las coordenadas del espacio de mosaico (a, b) en coordenadas del espacio de pantalla (x, y) es ejecutarlo a través de la siguiente matriz de transformación:
Definiciones: un y b para la baldosa (0, 0) están en el intervalo [0,0, 1,0) con (0.0, 0.0) que es la esquina superior, (1.0, 1.0) de la esquina inferior, (0.0, 1.0) la esquina izquierda y (1.0, 0.0) la esquina derecha en el espacio de la pantalla.
Extendemos las definiciones de coordenadas por una tercera coordenada constante (siempre es exactamente 1) para poder incorporar la traducción en la matriz.
Ahora puede crear la matriz inversa para esta transformación. La fórmula básica es:
... con C siendo la matriz de cofactores para A .
En su caso, el determinante | A | siempre es 1024, sin importar el desplazamiento, por lo que la matriz inversa es:
Ejemplo de cálculo
Ahora, para sus datos de ejemplo ...
Ponga su número de compensación en la fórmula, y obtendrá:
Multiplicar (105, 100, 1) (las coordenadas de la pantalla) con la matriz te da:
Como la tercera coordenada siempre es 1, no tenemos que calcularla. Redondea hacia abajo al número entero más cercano, y obtienes (1, 4) como tus coordenadas de espacio de mosaico, como se esperaba.
Matrices de proyección dimetrica general
Si tiene una perspectiva como esta con cada mosaico de 2 w de ancho (64 en el ejemplo, entonces w = 32) y 2 h de altura (32 en el ejemplo, entonces h = 16), y el desplazamiento del punto de origen en el espacio de pantalla siendo f x y f y para el eje horizontal y vertical respectivamente (192 y 0 en el ejemplo), las matrices se ven a continuación.
Espacio de mosaico a espacio de pantalla
Espacio de pantalla a espacio de mosaico
fuente