Estoy trabajando en la construcción de tetris ahora en Java y estoy en el punto de rotaciones...
Originalmente codifiqué todas las rotaciones, pero descubrí que el álgebra lineal (rotaciones matriciales) era la mejor manera de hacerlo.
Estoy intentando utilizar una matriz de rotación para girar mis piezas, y he descubierto que necesito un buen conocimiento de la trigonometría.
No entiendo cómo R(90 grados) equivale a una matriz de rotación de R(-theta) =
$$\begin{bmatrix}cos0 &sin0 \\-sin0 & cos0\end{bmatrix}$$ , alias $$\begin{bmatrix} 0 & 1 \\ -1& 0 \end{bmatrix}$$ (btw, si sabes cómo hacer una matriz en stackoverflow, por favor házmelo saber). ¿Cómo equivale eso a una rotación de 90 grados? ¿De dónde salen esos ceros y unos? Además, ¿cómo se traduciría eso en código? No estoy buscando a alguien que lo codifique por mí, estoy buscando un concepto con tal vez un fragmento de pseudocódigo.
Estoy intentando visualizarlo con este dibujo poniendo la rejilla y las fichas en un gráfico y dibujando los ángulos... pero sigo sin entenderlo.
¿Alguien puede ayudar?
Gracias.
Transponiendo
2 votos
Para obtener información básica sobre la escritura de las matemáticas en este sitio, consulte, por ejemplo aquí , aquí , aquí y aquí . En particular, la primera respuesta a la pregunta del primer enlace le ayudará a componer las matrices.
0 votos
Muy útil. Gracias
0 votos
Tu matriz de rotación es una matriz de rotación del espacio vectorial y quieres una transformación afín, no una lineal.
0 votos
@xavierm02 De acuerdo, por la descripción tendría sentido que quisiera usar eso ya que quiero simplemente reubicar los puntos conservando la forma y la distancia entre cada baldosa. ¿Puedes responder un poco sobre cómo difiere eso de lo que tengo arriba (cómo difiere affine de la transformación lineal) y cómo puede verse en pseudocódigo?
0 votos
Pues para una función afín $f$ viene dada por la imagen $f(A)$ de un punto $A$ y su transformación lineal asociada $g$ . Y luego $f(M)=f(A+\vec{AM})=f(A)+g(\vec{AM})$
1 votos
Dado que estás buscando tanto ayuda para la codificación como para las matemáticas, te sugiero que empieces en gamedev.SE; a menos que estés rotando físicamente las piezas para su visualización (por ejemplo, esperas tener una pieza rotada por $45^\circ$ en algún momento), entonces es casi seguro que la codificación dura es mejor que las matrices de rotación, pero eso es más una discusión de gamedev que una matemática.
0 votos
En su caso, con $C$ el centro, querrías $f(C)=C$ y luego $g$ sería la aplicación definida por su matriz de rotación.
1 votos
@StevenStadnicki Bueno, mi objetivo es 1) Aprender algunas matemáticas útiles, 2) Quiero codificar una función que puede manejar la rotación de cualquier forma ... así que quiero permanecer lejos de hardcoding rotaciones para 7 formas.
0 votos
@Growler ¡Apruebo de todo corazón el aprendizaje de las matemáticas útiles! Dicho esto, esto realmente hace me parece que son matemáticas específicas de desarrollo de juegos, y realmente sospecho que obtendrías una mejor respuesta en ese sitio. (Además, 4 orientaciones cada una para 7 formas es todavía algo que yo codificaría por razones ligeramente sutiles; pero incluso la versión de rotación "matemática" de esto probablemente pertenece a gamedev.SE y yo animaría a migrarlo).