una traslacion transformación rotación rotacion matriz matrices las identificar explicacion encontrar desplazamiento derivada demostracion coordenadas cartesianas opengl matrix rotation interpolation

opengl - traslacion - Interpolando matrices de rotación



matriz rotacion traslacion 3d (2)

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 ángulos de Euler que producen 2 conjuntos de ángulos X, Y, Z y tratando de determinar qué ángulos 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é á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?


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 ángulos desde cero al ángulo previamente calculado desde T

Esto es equivalente a usar SLERP.