Tengo una matriz de rotación R:
R=[[-0.22247682, -0.32863132, -0.91788099],
[-0.01426572, -0.94027818, 0.34010798],
[-0.9748336 , 0.08876037, 0.20450194]]
y quiero descomponer esto en tres rotaciones, , donde considero rotaciones en el sentido de las agujas del reloj. La matriz de rotación en términos de estos ángulos de Euler viene dada por
Entonces, calculo , , y . Como doble verificación, reconstruyo la matriz R a partir de estos ángulos de Euler y encuentro lo siguiente:
R'=[[ 0.22247682, 0.32863132, -0.91788099],
[ 0.01426572, 0.94027818, 0.34010798],
[ 0.9748336 , -0.08876037, 0.20450194]])
Revisé todo dos veces, pero no puedo encontrar cuál es el problema. ¿Qué me podría estar perdiendo?
Editar: resulta que el problema de transposición se debió a que mi código python tenía algún problema de indexación. Sin embargo, los problemas de la señal aún persisten. Actualicé la matriz R'
anterior.
He confirmado la expresión de la matriz de rotación, pero extraería los ángulos de manera un poco diferente a usted.
donde atan2(dy,dx)
es el arco tangente que cubre todo el círculo unitario.
La reconstrucción es así
R = RZ(1.2159450042115176)*RX(1.3648414591977873)*RZ(-1.4799948857740634)
1) Tu cálculo de los ángulos es correcto, aparte de la indeterminación en los signos.
De puedes deducir . De puedes deducir , y lo mismo para .
Luego deberá verificar las suposiciones con los otros elementos de la matriz inicial.
Tomando entonces y son positivos. De y luego sigue que y serán ambas negativas: entonces .
Para los signos de y son correctos
2) Las matrices de rotación elemental, definidas de acuerdo con este artículo de Wikipedia, por lo tanto, pre-multiplicación, en sentido antihorario y derecha en particular, son
3) Aplicando estas matrices y los ángulos corregidos, obtengo que
El resultado que está obteniendo, además de signos, es la transposición de la matriz original, lo que significa que probablemente no esté utilizando las matrices elementales correctas.
Cabina G
nitrato de sodio
amd
Juan Alexiou
nitrato de sodio
Juan Alexiou
atan2(dx, dy)
ya vecesatan2(dy, dx)
.