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.

