Para entender las ventajas del uso de cuaterniones hay que considerar diferentes formas de representar las rotaciones.
A continuación, algunas formas con un resumen de los pros y los contras:
- Ángulos de Euler
- Matrices de rotación
- Ángulo del eje
- Cuaterniones
- Rotores (espinores normalizados)
Los ángulos de Euler son la mejor opción si quiere que el usuario especifique una orientación de forma intuitiva. Además, ocupan poco espacio (tres números). Sin embargo, es más difícil interpolar linealmente los valores. Considere el caso de que quiera interpolar entre 359 y 0 grados. Interpolar linealmente causaría una gran rotación, aunque las dos orientaciones sean casi iguales. Escribir la interpolación del camino más corto, es fácil para un eje, pero no es trivial cuando se consideran los tres ángulos de Euler(por ejemplo el camino más corto entre (240, 57, 145) y (35, -233, -270) no es inmediatamente claro).
Las matrices de rotación especifican un nuevo marco de referencia utilizando tres vectores normalizados y ortogonales (Derecha, Arriba, Afuera, que al multiplicarse se convierten en las nuevas x, y, z). Las matrices de rotación son útiles para operaciones como el strafing (movimiento lateral), que sólo requiere trasladarse a lo largo del vector Derecho de la matriz de rotación de la cámara. Sin embargo, no hay un método claro de interpolación entre ellas. También son caras de normalizar, lo que es necesario para evitar que se introduzcan escalas.
Los ángulos de eje, como su nombre indica, son una forma de especificar un eje de rotación y un ángulo para girar alrededor de ese eje. Puedes pensar en los ángulos de Euler, como rotaciones de ángulos de tres ejes, donde los ejes son el eje x, y, z respectivamente. Interpolar linealmente el ángulo en un ángulo de eje es bastante sencillo (si recuerdas tomar el camino más corto), sin embargo interpolar linealmente entre diferentes ejes no lo es.
Los cuaterniones son una forma de especificar una rotación a través de un eje y el coseno de la mitad del ángulo. Su principal ventaja es que puedo elegir dos cuaterniones cualesquiera e interpolar suavemente entre ellos.
Los rotores son otra forma de realizar rotaciones. Los rotores son básicamente cuaterniones, pero en lugar de pensar en ellos como números complejos 4D, los rotores se consideran multivectores 3D reales. Esto hace que su visualización sea mucho más comprensible (en comparación con los cuaterniones), pero requiere soltura en el álgebra geométrica para comprender su significado.
Bien, con esto como telón de fondo, puedo hablar de un ejemplo del mundo real.
Digamos que estás escribiendo un juego de ordenador donde los personajes están animados en 3ds Max. Necesita exportar una animación del personaje para jugar en su juego, pero no puede representar fielmente representar fielmente la interpolación utilizada por el programa de animación, y por lo tanto tiene que hacer un muestreo. La animación va a representarse como una lista de rotaciones para cada articulación. ¿Cómo debemos almacenar las rotaciones?
Si voy a muestrear cada cuadro, no interpolar, y el espacio no es un problema, probablemente almacenaría las rotaciones como matrices de rotación. Si el espacio fuera un problema, entonces los ángulos de Euler. Eso también me permitiría hacer cosas como almacenar sólo un ángulo para las articulaciones como la rodilla que tienen sólo un grado de libertad.
Si sólo muestreo cada 4 cuadros, y necesito interpolar depende de si estoy seguro de que el frame-rate se se mantendrá. Si estoy seguro de que la velocidad de fotogramas se mantendrá, puedo utilizar rotaciones relativas del ángulo del eje rotaciones relativas de los ángulos para realizar la interpolación. Esto es atípico. En la mayoría de los juegos la velocidad de fotogramas puede caer más allá de mi intervalo de muestreo, lo que requeriría saltarse un elemento de la lista para mantener la velocidad correcta de velocidad de reproducción. Si no estoy seguro de qué dos orientaciones necesito interpolar entre ellas, entonces utilizaría cuaterniones o rotores.