Los ángulos de Euler no son buenos para calcular las métricas, ya que no tienen simetrías adecuadas. Sugiero (ya que la pregunta está etiquetada en quaternions
) convierte sus dos orientaciones en cuaterniones p y q . Entonces:
En primer lugar, suponiendo que por distancia te refieras a la distancia entre dos rotaciones.
En segundo lugar, sabiendo que los cuaterniones tienen una doble cobertura del colector de rotación, es decir, q y −q representan la misma rotación.
Tercero, de segundo, decir que la "distancia" de cualquier cuaternión q=(w,x,y,z) al cuaternión de identidad (1,0,0,0) tiene sentido si w>0 . De lo contrario, para w<0 la distancia debe ser calculada a la "otra" identidad (−1,0,0,0) que sí está más cerca; o de forma equivalente, se encontraría la distancia entre −q y la verdadera identidad (1,0,0,0) .
Cuarto, la distancia entre dos cuaterniones p y q se puede encontrar de la siguiente manera:
- toma r=p∗q el cuaternión que une p a q . La distancia de p a q es ahora igual a la distancia de r a (1,0,0,0) (o a (−1,0,0,0) (ver Tercero arriba).
- toma el tronco, uθ=log(p∗q) , donde u=[ux,uy,uz] es un vector unitario que define el eje de rotación, y θ es la mitad del ángulo girado.
- la distancia es el ángulo girado, ϕ=2θ .
Nota: al tener cuaterniones unitarios q=[cos(ϕ/2),uxsin(ϕ/2),uysin(ϕ/2),uzsin(ϕ/2)] el registro se puede encontrar por inspección, pero si sólo se busca la distancia, esta distancia ϕ se puede encontrar con sólo:
- r=p∗q como en el punto 1.
- si rw<0 hacer r←−r (cambiar el signo del cuaternión r ).
- ϕ=2arccos(rw) , donde rw es la parte real de r .
Quinto. Se puede utilizar un atajo considerando sólo el doble del ángulo entre los dos cuaterniones vistos como 4'vectores, es decir cosθ=p⊤q→ϕ=2θ=2arccos(p⊤q) Si cosθ<0 , cambia el signo de uno de los cuaterniones y vuelve a empezar.
Toda esta información se puede encontrar aquí https://arxiv.org/abs/1711.02508