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:
$$\mathbf{x}=\frac{a\times b}{||a\times b||}\\ \theta=\cos^{-1}(\frac{a\cdot b}{||a||\cdot ||b||})$$
3) Encontrar la matriz de rotación utilizando exponencial mapa:
$$\mathbf{R}=e^{\mathbf{A}\theta} =\mathbf{I}+\sin(\theta)\cdot \mathbf{A}+\left(1-\cos(\theta)\right) \cdot \mathbf{A}^{2}$$
donde $\mathbf{A}$ es un sesgo de simetría de la matriz correspondiente a $\mathbf{x}$:
$$\mathbf{A}=[\mathbf{x}]_{\times}=\begin{bmatrix}0 & -\mathbf{x}_{3} & \mathbf{x}_{2} \\ \mathbf{x}_{3} & 0 & -\mathbf{x}_{1} \\ -\mathbf{x}_{2} & \mathbf{x}_{1} & 0\end{bmatrix}$$
Notas:
El eje se calcula utilizando la cruz del producto ya que esto da un vector perpendicular tanto a a$a$$b$. Sólo la dirección del eje es importante, por lo que se divide por su magnitud. Sin embargo, no estoy seguro de si $\mathbf{x}$ siempre tendrá la dirección correcta (el resultado puede ser $-\mathbf{x}$ en lugar de $\mathbf{x}$?).
La matriz de rotación se calcula utilizando Rodrigues' rotación de la fórmula.
Finalmente, el vector $\mathbf{R}a$ 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$.