Cómo combinar la rotación en 2 ejes en una matriz

8

Ya sé sobre las matrices que tengo que usar para realizar rotaciones. Si tengo que rotar en el eje z y luego en el eje x, lo haría en 2 pasos. Mi pregunta es, ¿es posible combinar ambas rotaciones en una sola matriz? Agradeceré sus comentarios.

Jorge
fuente

Respuestas:

8

(Esta respuesta es esencialmente la misma que la de Stefan, pero quería agregar algunos detalles sobre los vectores de fila y columna, y cómo determinar cuál está usando).

Sí, esto es posible, pero los detalles dependen de si representas tus vectores como filas o columnas.

Vectores de columna

Si está utilizando vectores de columna , normalmente los transformará multiplicando a la izquierda sus matrices:

vector = mRotateZ * vector;
vector = mRotateX * vector;

Por supuesto, también puedes hacer esto en un solo paso:

vector = mRotateX * mRotateZ * vector;

Pero la multiplicación matricial es asociativa, lo que significa que no importa qué multiplicación se realice primero:

A * B * C = (A * B) * C = A * (B * C)

Para que podamos escribir

Matrix mRotate = mRotateX * mRotateZ;
vector = mRotate * vector;

Ahora hemos creado una matriz individual, que es equivalente a primero gira alrededor Zy segundo sobre X. Esto se generaliza trivialmente para cualquier cantidad de transformaciones. Tenga en cuenta que las transformaciones se aplican de derecha a izquierda.

Vectores de fila

Si, por otro lado, está utilizando vectores de fila , normalmente multiplicará a la derecha sus matrices:

vector = vector * mRotateZ;
vector = vector * mRotateX;

De nuevo, escribiéndolo en un paso, obtenemos

vector = vector * mRotateZ * mRotateX;

que puede reescribirse como

Matrix mRotate = mRotateZ * mRotateX;
vector = vector * mRotate;

Tenga en cuenta que en este caso, las transformaciones se aplican de izquierda a derecha.

Martin Ender
fuente
1
Estaría muy atento con ese comentario de asociatividad, es fácil de
entender
@joojaa No sé a qué te refieres exactamente, pero he tratado de aclarar eso.
Martin Ender
Es difícil para un laico separarse entre el orden en que multiplica las cosas y el orden en que los elementos se multiplican.
joojaa
así que no entienden la diferencia entre asistiocativo y conmutativo. así que si hablas del orden de multiplicación, muchos pueden pensar en la conmutatividad
joojaa
6

Sí, simplemente multiplíquelos en orden inverso:

Matrix myrotation = Matrix.CreateRotationX(xrot) * Matrix.CreateRotationZ(zrot);

EDITAR. Mi respuesta solo se aplica si está utilizando vectores de columna. Consulte la respuesta detallada de Martin Büttner.

Stefan Agartsson
fuente
Lo siento pero no entiendo la idea. ¿Qué quiere decir exactamente con "orden inverso"?
JORGE
1
Multiplicar x por z en lugar de z por x;
Stefan Agartsson
1
en realidad el orden es arbitrario, uno puede modelar usando vectores de fila y uno puede modelar vectores de columna. El cálculo arroja el mismo resultado en ambos, pero el orden de multiplicación cambia. Pero sí, esta es la respuesta correcta.
joojaa
Joojaa, ¡gracias por dejarlo claro! La matriz de filas significa el orden inverso de la multiplicación, ¿es eso correcto?
Stefan Agartsson
3

De las matemáticas:

Hay un homomorfismo 2: 1 desde la unidad de cuaterniones hasta SO (3) (el grupo de rotación).

Lo que esto (esencialmente) significa es que:

  1. Cada orientación se puede representar como un cuaternión
  2. Los cuaterniones representan una sola rotación.
  3. La multiplicación de cuaterniones produce otro cuaternión (cierre), y es equivalente a componer las rotaciones.
  4. ¡Por lo tanto, cualquier número de rotaciones se puede representar como una rotación única!

Piénsalo. Comenzando desde el espacio objeto, puede girar el objeto en cualquier orientación utilizando sólo una sola rotación.


Me gustaría señalar que traer cuaterniones no fue solo matemática aleatoria. A diferencia de las otras respuestas, el enfoque preferido en los gráficos es representar las rotaciones como cuaterniones, ya que ocupan menos espacio y son más rápidas de combinar.

Existen formas fáciles de convertir en Google para convertir matrices de rotación y cuaterniones, según lo que prefiera. El punto es que las rotaciones son los cuaterniones en un sentido matemático, por lo que sus combinaciones también son rotaciones simples.

imallett
fuente