2011-04-07 15 views
12

tengo 2 matrices de rotación (permite llamar A y B) donde:interpolación entre las matrices de rotación

A = 1 0 0 
    0 0 -1 
    0 1 0 

y

B = -1 0 0 
    0 0 -1 
    0 -1 0 

Ésta es básicamente una rotación en la que la cámara gira para mirar detrás de sí mismo. Obviamente, no puedo simplemente interpolar los valores en las matrices directamente porque se ve raro. He intentado convertir las matrices en ángulos de Euler que producen 2 conjuntos de ángulos X, Y, Z y tratando de determinar qué ángulos usar basándose en la distancia mínima entre cada componente del ángulo X, Y, Z. Eso definitivamente da como resultado el tipo de rotación que quiero, pero no puedo pensar en una forma decente para determinar qué ángulos interpolar, porque a veces los conjuntos de ángulos que producen el menor error dan como resultado una rotación sobre los ejes/ejes incorrectos. También probé cuaterniones, pero eso esencialmente me dio el mismo resultado. ¿Alguien puede señalarme en la dirección correcta?

Respuesta

9

Mi opinión personal es que el uso de cuaterniones para este tipo de cosas tiene más sentido. Dicho eso, puedes hacerlo sin usar cuaterniones.

Lo que hay que notar es que la matriz de la "diferencia", es decir, la matriz que lleva a la "orientación" A en la "orientación" B se puede calcular mediante T = A.tranpose() * B (teniendo en cuenta que está multiplicando a la derecha). Una vez que tenga la matriz de rotación T, puede convertir a la representación de ángulo de eje (consulte, por ejemplo, http://en.wikipedia.org/wiki/Axis-angle_representation).

Finalmente, dado que conoce un eje de rotación que toma A a B, puede interpolar linealmente los ángulos desde cero al ángulo calculado previamente desde T.

Esto es equivalente a usar SLERP.

Cuestiones relacionadas