2010-10-20 80 views
8

Dadas las siguientes definiciones para las matrices de rotación x, y, z, ¿cómo puedo representar esto como una matriz completa? Simplemente multiplique x, y, & matrices?¿Cómo representar una rotación de matriz 4x4?

X Rotación:

[1 0 0 0] 
[0 cos(-X Angle) -sin(-X Angle) 0] 
[0 sin(-X Angle) cos(-X Angle) 0] 
[0 0 0 1] 

Y Rotación:

[cos(-Y Angle) 0 sin(-Y Angle) 0] 
[0 1 0 0] 
[-sin(-Y Angle) 0 cos(-Y Angle) 0] 
[0 0 0 1] 

Z Rotación:

[cos(-Z Angle) -sin(-Z Angle) 0 0] 
[sin(-Z Angle) cos(-Z Angle) 0 0] 
[0 0 1 0] 
[0 0 0 1] 

Editar: tengo una clase rotación independiente que contiene un x, y , valor flotante z, que luego convierto en una matriz para combinar con oth traducciones/escalas/rotaciones.

A juzgar por las respuestas aquí, puedo suponer que si hago algo como:

rotación rotación; rotation.SetX (45); rotation.SetY (90); rotation.SetZ (180);

¿Entonces realmente es realmente importante en qué orden se aplican las rotaciones? ¿O es seguro suponer que al usar la clase de rotación, acepta que se apliquen en orden x, y, z?

+0

Esto se responde [aquí] (http://stackoverflow.com/questions/5188876/rotation-matrix-given-angle-and-point-in-x-y-z/5188904#5188904). – Glenn

Respuesta

6

Sí, multiplicar las tres matrices a su vez las compondrá.

EDIT:

El orden en que se aplica la multiplicación de las matrices determinará el orden de las rotaciones serán aplicados al grano.

P × (X × Y × Z)  Rotations in X, Y, then Z will be performed 
P × (Y × X × Z)  Rotations in Y, X, then Z will be performed 
P × (Z × X × Y)  Rotations in Z, X, then Y will be performed 
+1

Tenga en cuenta que puede o no ser la rotación que está esperando (recuerde que en 3D, las rotaciones NO se conmutan). – user168715

+0

Pero tenga en cuenta que el orden de la composición importa: la multiplicación de la matriz no es conmutativa y tampoco las rotaciones diferentes ejes. – walkytalky

+0

Primero, decida en qué orden aplicar las rotaciones (digamos X luego Y y luego Z). Luego, también depende de su convención de si sus puntos son vectores de fila o vectores de columna. Para los vectores de filas, tiene '((r * X) * Y) * Z = r * (XYZ)' - contra los vectores de columnas, tiene 'Z * (Y * (X * c)) = (ZYX) * c'. – comingstorm

1

Como acotación al margen, y si eres lo suficientemente temprano en sus actividades de desarrollo aquí, es posible que desee considerar el uso de quaternion rotation. Tiene un número de comparative advantages para enfoques basados ​​en matriz.

2

En realidad, es muy importante el orden en que se aplican los giros en.

el orden que desee depende de lo que desea que las rotaciones que hagan. Por ejemplo, si estás modelando un avión, es posible que desees rodar primero (rotar a lo largo del eje largo del cuerpo), luego el paso (rotar a lo largo del otro eje horizontal), luego el rumbo (rotar a lo largo del eje vertical)) Esto sería porque, si primero hicieras el rumbo, el avión ya no estaría alineado a lo largo de los otros ejes. Más allá de eso, debes lidiar con tus convenciones: ¿cuál de estos ejes corresponde a X, Y y Z?

Generalmente, solo desea elegir un orden de rotación particular para aplicaciones específicas. No tiene mucho sentido definir un objeto genérico "XYZrotation"; típicamente, tendrá transformaciones genéricas (es decir, matrices que pueden ser cualquier concatenación de rotaciones, traducciones, etc.) y varias formas de obtenerlas (por ejemplo, rotX, rotY, translate, scale ...), además de la posibilidad de aplicar ellos en un orden particular (haciendo la multiplicación de la matriz).

Si quiere algo que solo represente rotaciones y nada más, podría considerar cuaterniones (como se sugiere y sugiere). Sin embargo, aún necesita decidir en qué orden realizar sus rotaciones y, una vez más, realmente no tiene sentido encargar una orden obligatoria para eso.

Cuestiones relacionadas