Nuestro equipo especializado despúes de ciertos días de investigación y de recopilar de datos, han obtenido los datos necesarios, nuestro deseo es que resulte útil para ti para tu proyecto.
El bloqueo del cardán es una de las razones, aunque, como usted dice, es solo un problema con los ángulos de Euler y se puede resolver fácilmente. Los ángulos de Euler todavía se usan cuando la memoria es una preocupación, ya que solo necesita almacenar 3 números.
Para cuaterniones frente a una matriz de rotación de 3×3, el cuaternión tiene la ventaja en tamaño (4 escalares frente a 9) y velocidad (la multiplicación de cuaterniones es mucho más rápida que la multiplicación de matrices de 3×3).
Tenga en cuenta que todo de estas representaciones de rotaciones se utilizan en la práctica. Los ángulos de Euler utilizan la menor cantidad de memoria; las matrices usan más memoria pero no sufren de bloqueo Gimbal y tienen buenas propiedades analíticas; y los cuaterniones logran un buen equilibrio de ambos, siendo livianos, pero libres de bloqueo Gimbal.
En física, hay muy buenas razones por las que no usamos cuaterniones (a pesar de la extraña historia que ocasionalmente se cuenta sobre Hamilton / Gibbs / etc.). La física requiere que nuestras descripciones tengan un buen comportamiento analítico (esto tiene un significado definido con precisión, pero en algunas formas bastante técnicas que van mucho más allá de lo que se enseña en las clases de introducción normales, por lo que no entraré en detalles). Resulta que los cuaterniones no tienen este buen comportamiento, por lo que no son útiles, y los vectores / matrices sí, así que los usamos.
Bueno, yo también soy físico. ¡Y hay algunas situaciones en las que los cuaterniones simplemente se mueven! Armónicos esféricos, por ejemplo. Tienes dos átomos que se dispersan, intercambiando un electrón: ¿cuál es la transferencia de espín orbital? Con los cuaterniones es solo una multiplicación, es decir, la suma de los exponentes de las funciones base SH expresadas como cuaterniones. (Sin embargo, convertir los polinomios de Legendre en notación de cuaternión es un poco tedioso).
Pero estoy de acuerdo, no son una herramienta universal, y especialmente en la mecánica de carrocería rígida serían muy engorrosos de usar. Sin embargo, para citar la respuesta de Bertrand Russell en la pregunta de un estudiante sobre cuántas matemáticas necesita saber un físico: “¡Cuanto más se pueda!”
De todos modos: ¿Por qué amamos los cuaterniones en los gráficos por computadora? Porque tienen varias propiedades atractivas. Primero, uno puede interpolarlos muy bien, lo cual es importante si uno está animando cosas giratorias, como las extremidades alrededor de una articulación. Con un cuaternión es solo multiplicación escalar y normalización. Expresar esto con una matriz requiere la evaluación de sen y cos y luego construir una matriz de rotación. Entonces, multiplicar un vector con un cuaternión es aún más barato que pasar por una multiplicación de matriz de vector completo, también es aún más barato si se agrega una traducción después. Si considera un sistema de animación esquelética para un personaje humano, donde se deben evaluar muchas traslaciones / rotaciones para una gran cantidad de vértices, esto tiene un gran impacto.
Otro efecto secundario agradable del uso de cuaterniones es que cualquier transformación es intrínsecamente ortonormal. Con las matrices de traducción, uno debe volver a ortonormalizar cada par de pasos de la animación, debido a errores de redondeo numérico.
El argumento sin bloqueo de cardán parece extraño, ya que este es solo un problema de ángulos de Euler. También es solo un problema de coordenadas (al igual que la singularidad en r = 0 en coordenadas polares (el jacobiano pierde rango)), lo que significa que es solo un problema local y se puede resolver cambiando las coordenadas, girando fuera de la degeneración, o usando dos sistemas de coordenadas superpuestos.
A muchas aplicaciones 3D les gusta usar ángulos de Euler para definir la orientación de un objeto. Para los simuladores de vuelo en particular, representan una forma teóricamente útil de almacenar la orientación de una manera que sea fácilmente modificable.
También debe tener en cuenta que cosas como “cambiar de coordenadas, rotar fuera de la degeneración o usar dos sistemas de coordenadas superpuestos” requieren esfuerzo. Esfuerzo significa código. Y el código significa rendimiento. Perder rendimiento cuando no lo haces tener no es algo bueno para muchas aplicaciones 3D. Después de todo, ¿qué se gana con todos estos trucos, si con solo usar cuaterniones obtendría todo lo que necesita?
Estoy menos seguro acerca de los problemas numéricos, ya que no sé en detalle cómo se implementarían ambos (y cualquier alternativa). He leído que volver a normalizar un cuaternión es más fácil que hacerlo para una matriz de rotación, pero esto es solo true para una matriz general; una rotación tiene restricciones adicionales que trivializa esto (que están incorporadas en la definición de cuaterniones) (de hecho, esto tiene que ser true ya que tienen el mismo número de grados de libertad).
Los problemas numéricos surgen cuando se trata de múltiples rotaciones consecutivas de una orientación. Imagina que tienes un objeto en el espacio. Y en cada corte de tiempo, le aplicas un pequeño cambio de guiñada. Después de cada cambio, debe volver a normalizar la orientación; de lo contrario, aparecerán problemas de precisión y arruinarán las cosas.
Si usa matrices, cada vez que haga una multiplicación de matrices, debe volver a ortonormalizar la matriz. La matriz que está ortonormalizando no es aún una matriz de rotación, por lo que no estaría muy seguro de esa fácil ortonormalización. Sin embargo, puedo estar seguro de esto:
No será tan rápido como una normalización vectorial 4D. Eso es lo que usan los cuaterniones para normalizarse después de sucesivas rotaciones.
La normalización de cuaterniones es barata. Incluso la normalización de la matriz de rotación especializada no será como barato. Una vez más, el rendimiento importa.
También hay otro problema que las matrices no resuelven fácilmente: la interpolación entre dos orientaciones diferentes.
Cuando se trata de un personaje en 3D, a menudo tiene una serie de transformaciones que definen la ubicación de cada hueso en el personaje. Esta jerarquía de huesos representa al personaje en una pose particular.
En la mayoría de los sistemas de animación, para calcular la pose de un personaje en un momento determinado, se interpola entre transformaciones. Esto requiere interpolar las transformaciones correspondientes.
Interpolar dos matrices es … no trivial. Al menos, lo es si quieres algo que se parezca a una matriz de rotación al final. Después de todo, el propósito de la interpolación es producir algo a medio camino entre las dos transformaciones.
Para los cuaterniones, todo lo que necesita es un lerp 4D seguido de una normalización. Eso es todo: tome dos cuaterniones e interpole linealmente los componentes. Normaliza el resultado.
Si desea una interpolación de mejor calidad (y a veces lo hace), puede resaltar el lerp esférico. Esto hace que la interpolación se comporte mejor para orientaciones más dispares. Esta matemática es mucho más difícil y requiere más operaciones para matrices que cuaterniones.
Si eres capaz, tienes la opción de dejar un escrito acerca de qué te ha gustado de este artículo.