Soy físico, he estado aprendiendo algo de programación y me he encontrado con mucha gente que usa cuaterniones para rotaciones en lugar de escribir cosas en forma de matriz / vector.
En física, hay muy buenas razones por las que no usamos cuaterniones (a pesar de la extraña historia que se cuenta ocasionalmente 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.
Sin embargo, restringidas a rotaciones rígidas y descripciones que no utilizan ninguna estructura analítica, las rotaciones 3D pueden describirse de manera equivalente de cualquier manera (o algunas otras formas).
Generalmente, solo queremos un mapeo de un punto X = (x, y, z) a un nuevo punto X '= (x', y ', z') sujeto a la restricción de que X 2 = X ' 2 . Y hay muchas cosas que hacen esto.
La forma ingenua es simplemente dibujar los triángulos que esto define y usar la trigonometría, o usar el isomorfismo entre un punto (x, y, z) y un vector (x, y, z) y la función f (X) = X 'y una matriz MX = X ', o usando cuaterniones, o proyectando componentes del antiguo vector a lo largo del nuevo usando algún otro método (x, y, z) T. (a, b, c) (x', y ', z '), etc.
Desde un punto de vista matemático, estas descripciones son todas equivalentes en esta configuración (como un teorema). Todos tienen el mismo número de grados de libertad, el mismo número de restricciones, etc.
Entonces, ¿por qué los cuaterniones parecen preferidos a los vectores?
Las razones habituales que veo son que no hay bloqueo de cardán o problemas numéricos.
El argumento de no 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 coordenadas, girando fuera de la degeneración, o usando dos sistemas de coordenadas superpuestos.
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 solo es cierto para una matriz general; una rotación tiene restricciones adicionales que trivializan esto (que están incorporadas en la definición de cuaterniones) (de hecho, esto tiene que ser cierto ya que tienen el mismo número de grados de libertad).
Entonces, ¿cuál es el motivo del uso de cuaterniones sobre vectores u otras alternativas?