¿Qué es un cuaternión?

50

¿Qué es un cuaternión y cómo funcionan? Además, ¿qué ventajas obtienes usando tres puntos en un plano 2D? Finalmente, ¿cuándo se considera una buena práctica usar quaternions?

SirMathhman
fuente
Históricamente, creo que los cuaterniones llegaron primero, y luego los productos de punto y cruz se derivaron de los cuaterniones.
2
Este artículo animado me pareció muy informativo: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly
En matemáticas puras, creo que los cuaterniones son 3 números complejos como i² = j² = k² = ijk
Vinz243
Los cuaterniones son la mejor manera de interpolar suavemente las rotaciones. Simplemente interpolar matrices de rotación no funciona, porque no siempre obtendrá una matriz de rotación como resultado. Interpolar los ángulos de Euler no da como resultado una rotación suave. Entonces, para animar rotaciones, como es necesario en gráficos de computadora o robótica, los cuaterniones son el camino a seguir. Y hay una extensión útil, pero de alguna manera no tan utilizada, llamada cuaterniones duales que te permite representar la transformación y la rotación
Tobias B

Respuestas:

43

Matemáticamente, un cuaternión es un número complejo con 4 dimensiones. Pero en el desarrollo del juego, los Quaterniones a menudo se usan para describir una rotación en el espacio 3d mediante la codificación:

  1. un eje de rotación (en forma de un vector tridimensional)
  2. qué tan lejos dar la vuelta a ese eje

Tenga en cuenta que esta información está codificada con senos y cosenos dentro del cuaternión, por lo que, en general, no debe intentar establecer o leer explícitamente los componentes internos del cuaternión (xyzw) individualmente. Es fácil cometer un error de esa manera y obtener un resultado no significativo. Una biblioteca matemática de quaternion generalmente proporcionará funciones para operar en quaternions (por ejemplo, convertirlos a y desde ángulos de Euler o ángulo de eje), lo que garantiza que las matemáticas sean correctas y tenga el beneficio adicional de hacer que su código sea más fácil de leer y comprender.

Una forma alternativa de describir las rotaciones es describiendo qué tan lejos girar alrededor de los 3 ejes fijos 'x, y y z (también conocidos como ángulos de Euler) que solo requiere 3 números en lugar de 4 y generalmente es más intuitivo de usar. Sin embargo, los ángulos de Euler están sujetos a un problema llamado bloqueo de cardán : cuando gira 90 ° alrededor de un eje, los otros dos ejes se vuelven equivalentes. Con los cuaterniones, este problema no ocurre.

Otra forma de expresar rotaciones en el espacio 3D es con una matriz de transformación 4x4 . Pero con una matriz de transformación no solo puede rotar, sino también escalar, trasladar y sesgar. Cuando solo desea rotación, una matriz sería exagerada y un cuaternión una solución mucho más rápida y simple.

Este problema solo es relevante en el espacio 3d. En el espacio 2d, solo tiene un eje de rotación. Cualquier rotación se puede expresar con un solo número de coma flotante o un único número complejo, por lo que no tiene este problema. Si bien, en teoría, puede expresar una rotación en un plano 2D con un cuaternión donde el eje apunta hacia (o fuera) del plano, generalmente es excesivo.

Philipp
fuente
66
el bloqueo del cardán no es un problema en los cuaterniones si comienza desde los cuaterniones y termina con los cuaterniones, el bloqueo del cardán se establece cuando tiene un paso que se convierte en ángulos de euler o hacia atrás.
monstruo de trinquete
2
Los cuaterniones no son eje + ángulo, son 3 números complejos y una escala.
transistor09
11
@ transistor09 ¿creería que ambos tienen razón? La parte imaginaria de 3 componentes de una unidad de cuaternión se puede interpretar como un vector unitario a lo largo del eje de rotación, escalado por el seno de la mitad del ángulo de rotación. La parte real de la unidad quaternion es el coseno de la mitad del ángulo de rotación. Entonces tiene razón en que no es exactamente un formato de eje angular, pero es cierto que los componentes de un cuaternión pueden interpretarse como un eje y una medida (no lineal) de qué tan lejos girar alrededor de ese eje.
DMGregory
2
También podría mencionar qué ventaja tienen los cuaterniones sobre una matriz de rotación: son más rápidos de combinar. Al combinar rotaciones, multiplicar dos cuaterniones requiere menos operaciones que multiplicar matrices.
Vuelva a instalar Mónica
3
En realidad, en el espacio 2D, los números complejos son el análogo exacto. Multiplique un punto 2D con un número complejo, y lo ha girado; de hecho, es exactamente lo mismo que la rotación sin / cos habitual (que debería ser obvio si comprende los números complejos lo suficientemente bien). Esto puede explotarse un poco, pero al final, los gráficos 2D no son tan intensivos en rendimiento hoy en día, por lo que no te da una gran mejora a menos que estés realmente cómodo usando números complejos (que la mayoría de las personas decididamente no están - Como lo demuestra el increíblemente pobre código basado en el cuaternión que existe: D).
Luaan
13

Esto es para agregar a la respuesta de @ Philipp.

Además, ¿qué ventajas obtienes al usar tres puntos en un plano 2D?

Realmente no necesita cuaterniones si todo lo que le interesa es rotar en el plano, es decir, sobre el eje z. En este caso, todo lo que necesita es el ángulo de guiñada, y puede explotar el hecho de que conmutaciones sucesivas sobre el eje z conmutan. Para que pueda aplicar sus rotaciones en el orden que desee.

La situación es diferente si está girando en un plano que no es el plano XY. Esta rotación es equivalente a girar sobre un eje 3D arbitrario. Ahora tienes dos opciones:

  • gire su plano en 3D para que coincida con el plano XY y luego guiñe, y transforme de nuevo, o

  • Para empezar, piense en su rotación como en 3D.

La segunda opción es más fácil de codificar. Como dijo @Philipp, los cuaterniones evitan el bloqueo del cardán (si evita las conversiones intermedias de RPY o de eje / ángulo).

Finalmente, ¿cuándo se considera una buena práctica usar quaternions?

Siempre que haya rotaciones en 3D, es una buena práctica usar cuaterniones.

P.ej:

  • En Qt . Los quats facilitan la interpolación entre rotaciones, como en la función slerp .

  • ROS los usa para transformar poses de robot.

  • En el motor de dinámica de bala

  • Para una aplicación muy sofisticada, consulte aquí para su uso en mecánica 3D clásica.

PKG
fuente
" Siempre que haya rotaciones en 3D, es una buena práctica usar cuaterniones". es solo un poco demasiado fuerte. Casi siempre es mejor; Hay situaciones en las que las alternativas son apropiadas. (Como ejemplo de una imperfección, la enésima raíz de un Quaternion tiene varios valores)
Yakk
1
Los cuaterniones son una mercancía para usar y un dolor para implementar. Puede llevarse bien sin ellos si conoce el bloqueo del cardán.
Hatoru Hansou