¿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?
mathematics
terminology
SirMathhman
fuente
fuente
Respuestas:
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:
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.
fuente
Esto es para agregar a la respuesta de @ Philipp.
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).
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.
fuente