Encuentra el vector que va de la cola a la cabeza y lo normaliza: llama al resultado $\hat{Z}^\prime$ .
Encuentra el vector que une el punto del ala izquierda con el punto del ala derecha y lo normaliza: llama al resultado $\hat{Y}^\prime$ .
Opcional: hacer una comprobación de cordura que $\left<\hat{Y}^\prime,\,\hat{Z}^\prime\right>=0$
Calcula ahora $\hat{X}^\prime = \hat{Y}^\prime\times\hat{Z}^\prime$ .
Reúne los tres vectores como vectores columna en la matriz $U = \left(\hat{X}^\prime\, \hat{Y}^\prime\,\hat{Z}^\prime\right)$ . Esta es la matriz de rotación que gira su referencia $\hat{X},\,\hat{Y},\,\hat{Z}$ en la base alineada a la mosca.
Para convertir a ángulos, tenemos que calcular el eje de rotación y el ángulo de rotación. La forma más fácil de hacerlo es mediante la fórmula de Rodrigues para un miembro general $\exp\left(H_{3\times 3}\right)$ de $SO(3)$ "hacia atrás"
$$\exp\left(H_{3\times 3}\right)=I_{3\times3}+\frac{\sin\left(||H_{3\times 3}||\right)}{||H_{3\times 3}||}\,H_{3\times 3} +\frac{1-\cos\left(||H_{3\times 3}||\right)}{||H_{3\times 3}||^2}\,H_{3\times 3}^2\tag{1}$$
donde:
$$H_{3\times3} = \left(\begin{array}{ccc}0&z&-y\\-z&0&x\\y&-x&0\end{array}\right)\tag{2}$$
y
$$||H_{3\times3}||=\sqrt{x^2+y^2+y^2}\tag{3}$$
donde $x,\,y,\,z$ son las componentes del eje de rotación y $\sqrt{x^2+y^2+y^2}$ es el ángulo de rotación en radianes. $H_{3\times3}$ es el miembro del álgebra de Lie $\mathfrak{so}(3)$ que exponga a la matriz de rotación.
Entonces, tomamos la matriz $U$ que encontraste arriba y compáralo con (1): puedes ver en (1) que la parte sesgada-simétrica es:
$$\frac{1}{2}(U-U^T) = \frac{\sin\left(||H_{3\times 3}||\right)}{||H_{3\times 3}||}\,H_{3\times 3}\tag{4}$$
y esto le permitirá leer $H_{3\times3}$ y el ángulo de rotación $||H_{3\times 3}||$ .
Por cierto, si hicieras esto para construir un sistema de seguimiento para la mosca, tendrías que hacer algo como encontrar el mejor ajuste por mínimos cuadrados a los vectores $\hat{Z}^\prime$ y $\hat{Y}^\prime$ Los vectores de datos brutos no serían del todo ortogonales debido a los datos ruidosos. Como alternativa, se podrían elegir 3 puntos sobre la marcha, seguirlos y encontrar $\hat{Z}^\prime$ y $\hat{Y}^\prime$ como base ortogonal de los tres lados del triángulo. En ese caso, no tendrías que hacer el mejor ajuste por mínimos cuadrados, pero tu seguimiento podría ser menos preciso.