He escrito un algoritmo para resolver el siguiente problema: Dados dos 3-vectores, decir: a,b, hallar la rotación de a, de modo que su orientación coincide con b.
Sin embargo, no estoy seguro de si el siguiente algoritmo funciona en todos los casos:
1) Encontrar el eje y el ángulo utilizando el producto vectorial y producto escalar:
x=a×b||a×b||θ=cos−1(a⋅b||a||⋅||b||)
3) Encontrar la matriz de rotación utilizando exponencial mapa:
R=eAθ=I+sin(θ)⋅A+(1−cos(θ))⋅A2
donde A es un sesgo de simetría de la matriz correspondiente a x:
A=[x]×=[0−x3x2x30−x1−x2x10]
Notas:
El eje se calcula utilizando la cruz del producto ya que esto da un vector perpendicular tanto a aab. Sólo la dirección del eje es importante, por lo que se divide por su magnitud. Sin embargo, no estoy seguro de si x siempre tendrá la dirección correcta (el resultado puede ser −x en lugar de x?).
La matriz de rotación se calcula utilizando Rodrigues' rotación de la fórmula.
Finalmente, el vector Ra debe tener la misma dirección como b.
He probado este numéricamente y parece que funciona, pero me gustaría estar seguro de que las fórmulas de trabajo para cualquiera de los dos a,b.