Cuaternios

De IberOgre

En este texto haremos un repaso sobre los cuaternios o cuaterniones. Quizás no los conocieras hasta el momento, no debes preocuparte ya que abordaremos todos los aspectos básicos que necesitarás. No obstante, es recomendable que seas consciente que en el desarrollo de videojuegos resultan tremendamete útiles.


Contenido



Definición

Los cuaterniones son una extensión de los números reales bastante similar a la de los números complejos. Los números imaginarios extienden a los reales añadiendo la unidad imaginaria de forma que . Por su parte, los cuaterniones se generan añadiéndole a los números reales las unidades imaginarias , y de forma que .

Un cuaternión tiene, por tanto, como bases: .

Aplicaciones

Los cuaternios tienen aplicaciones en todo tipo de campos más allá del álgebra. Se utiliza intensivamente dentro de campos de la física como el electromagnetismo y la mecánica cuántica. Por supuesto, también se utilizan dentro de los gráficos por computador y, por extensión, en el mundo del desarrollo de videojuegos.

Los cuaterniones nos ayudarán a representar rotaciones sobre ejes arbitrarios en 3 dimensiones. Son bastante potentes y podemos combinarlos para producir rotaciones nuevas tal y como veremos en la sección de operaciones.

En este texto nos centraremos en el uso de los cuaternios dentro del campo que nos ocupa. Por ello, obviaremos muchos detalles complejos en pos de mantener el artículo ligero para poder avanzar hacia los siguientes artículos.

Representación como vector

Como hemos visto en el artículo sobre matrices, es posible representar una rotación tridimensional utilizando una matriz cuadrada de orden tres. Entonces, ¿para qué querríamos una nueva representación para las rotaciones? Las principales razones son la eficiencia y la comodidad en el trabajo.

La alternativa para representar a un cuaternión es la de un vector unidimensional de cuatro componentes. Las tres primeras componentes corresponderían a las partes imaginarias mientras que la última a la real. De esta manera, representamos los cuaternios utilizando la notación:



Es posible particionar la notación separando el eje del ángulo de la siguiente forma:



Las tres primeras componentes se refieren al eje sobre el que gira el vector mientras que contiene el ángulo de la rotación en radianes. Si qusiésemos representar mediante esta notación una rotación de radianes alrededor del eje y tendríamos:



Como ya vimos, podemos trabajar con rotaciones empleando matrices 3x3 pero necesitaríamos almacenar 9 números reales en memoria mientras que con el vector sólo nos hacen falta 4. Los chips gráficos actuales están preparados para el cálculo vectorial y trabajan muy bien con vectores de 4 componentes. Además, para combinar rotaciones con matrices utilizamos el producto matricial que en este caso suponen 9 productos y 6 sumas de reales, trabajar con vectores es muchísimo más eficiente en tiempo.

Operaciones

En este apartado haremos un recorrido por las operaciones más útiles que podemos realizar con los cuaterniones. Al igual que en el resto de artículos sobre matemáticas en IberOgre, trataremos de ofrecer un punto de vista lo más práctico posible.

Los cuaterniones cuentan con la mayoría de operaciones del álgebra pero muchas carecen de utilidad para nosotros. Podemos sumar dos cuaterniones aunque el resultado no representaría una rotación. Todos los cuaternios que representan una rotación deben tener módulo 1 por lo que será extremadamente raro que veas sumas de cuaterniones en cualquier fragmento de código.

Producto de cuaternios

El producto es la operación más importante de los cuaterniones para nosotros ya que nos ayudará a combinar rotaciones de forma encadenada. Sean los cuaternios y representando las rotaciones y de forma respectiva, representa la rotación compuesta: la rotación seguida de la rotación .

Existen varios tipos de productos entre cuaterniones, a nosotros nos interesa el producto de Grassman que se define:



Como podéis ver, la parte del eje consiste en 2 productos de vectores por un escalar, 1 producto vectorial, 1 suma de reales y 1 suma de real y vector. La sección del ángulo se calcula mediante 1 producto de reales, 1 producto escalar entre vectores y 1 resta entre reales.

El producto cumple con las siguientes propiedades

  • Asociatividad:
  • No conmutatividad

Como veremos más adelante, el hecho de que el producto no sea conmutativo es algo a tener en cuenta a la hora de encadenar rotaciones.

Conjugado

El conjugado de un cuaternión viene dado por otro cuaternión cuyos componentes del eje invierten su signo:


.


Módulo

El módulo de un cuaternión viene dado por la expresión:



Inversa

La inversa de un cuaternión se nota y viene dado por la expresión:



Aplicación de rotaciones

Rotar un vector con un cuaternión

Es muy común en el desarrollo de videojuegos querer rotar un vector utilizando un cuaternión. En primer lugar debemos convertir un vector tridimensional (3 componentes) a la notación de los cuaterniones, así tenemos:



Para llevar a cabo la rotación, multiplicamos el vector con el cuaternión deseado por la izquierda y por su inversa por la derecha:



La mayoría de bibliotecas matemáticas o de videojuegos (como Ogre), abstraen esta operación y simplemente debemos realizar el producto. No obstante, es conveniente que conozcas el método.

Encadenamiento de rotaciones

Las rotaciones se pueden encadenar de la misma forma que lo hacíamos con las matrices de transformación. Por ejemplo, vamos a tomar 3 rotaciones representadas por los cuaternios , y junto a sus equivalentes matriciales , y . Nuestro deseo es aplicar en primer lugar la rotación 1, seguida de la 2 y, por último, la 3.

La aplicación de las 3 rotaciones en su forma matricial a un vector se haría:



Por su parte, en su forma de cuaterniones, las rotaciones se aplicarían:



Nótese el cambio en el orden de los cuaterniones, esto se debe a que a la izquierda multiplicamos por los cuaterniones sin invertir mientras que por la derecha lo hacemos por los que sí están invertidos.

Interpolaciones

En el artículo de puntos y vectores aprendimos a obtener puntos intermedios en un segmento definido por otros dos puntos mediante interpolaciones lineales. Obtener rotaciones intermedias entre dos de ellas es, también, bastante sencillo y a continuación veremos la manera de conseguirlo. Suavizar una rotación puede ser muy útil si queremos que la cámara cambie de orientación de forma progresiva o si deseamos que nuestro personaje mire hacia otro punto poco a poco, sin brusquedades. Estos pequeños detalles no se aprecian a priori pero su ausencia provocan muy mala sensación en el jugador.

La manera más sencilla (conceptual y computacionalmente) de interpolar una interpolación lineal entre rotaciones (LERP) es la siguiente. Dadas las dos rotaciones inicial y final y , podemos encontrar rotaciones intermedias situadas a un porcentaje en el camino entre y :



Esta es una de las pocas ocasiones en las que utilizamos suma de cuaterniones. No obstante, si te fijas, dividimos por el módulo de la misma expresión del numerador. Esto produce siempre un cuaternión de modulo 1, es decir, uno que representa una rotación.

Conclusiones

Tras haber leído y comprendido este breve artículo serás capaz de comenzar a utilizar rotaciones en tus aplicaciones 3D. Podrás manejar la orientación de tus personajes, para que miren hacia donde se dirigen, por ejemplo. Serás capaz de modificar la orientación de la cámara para conseguir el encuadre deseado e irás descubriendo decenas de aplicaciones adicionales sobre la marcha.

Herramientas personales