Interpolando matrices de rotación

Tengo 2 matrices de rotación (vamos a llamarlas A y B) donde:

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

y

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

Esto es básicamente una rotación donde la cámara gira para mirar atrás. Obviamente no puedo simplemente interpolar los valores en las matrices directamente porque se ve raro. He intentado convertir las matrices en angularjs de Euler que producen 2 conjuntos de angularjs X, Y, Z y tratando de determinar qué angularjs utilizar en función de 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é angularjs interpolar, porque a veces los conjuntos de angularjs 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?

Utilice quaternions (SLERP). Ni las matrices de rotación ni los angularjs de Euler son apropiados para la interpolación.

Ver 45:05 aquí (David Sachs, Google Tech Talk) .

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 “diferencia”, es decir, la matriz que toma “orientación” A en “orientación” B se puede calcular mediante T = A.tranpose() * B (considerando que se está multiplicando a la derecha) . Una vez que tenga la matriz de rotación T , puede convertirla a una 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 de A a B , puede interpolar linealmente los angularjs desde cero al ángulo previamente calculado desde T

Esto es equivalente a usar SLERP.