Nuestros desarrolladores estrellas agotaron sus reservas de café, en su búsqueda diariamente por la solución, hasta que Julia halló la respuesta en GitHub y en este momento la comparte aquí.
Solución:
El producto escalar de los cuaterniones es simplemente el producto escalar euclidiano estándar en 4D:
dot = left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w
Entonces el ángulo que estás buscando es el arccos
del producto escalar (nota que el producto escalar no es el ángulo): acos(dot)
.
Sin embargo, si está buscando la rotación relativa entre dos cuaterniones, digamos desde q1
para q2
debe calcular el cuaternión relativo q = q1^-1 * q2
y luego encuentre la rotación asociada conq
.
Solo NOTA: acos (punto) no es muy estable desde el punto de vista numérico.
como se dijo anteriormente, q = q1^-1 * q2 y que angulo = 2*atan2(q.vec.length(), qw)
¿Debería ser 2 x acos (punto) para obtener el ángulo entre cuaterniones?
Aquí puedes ver las comentarios y valoraciones de los lectores
Si entiendes que te ha sido de utilidad este post, nos gustaría que lo compartas con otros desarrolladores de esta forma nos ayudas a extender nuestra información.