Agradeceríamos tu ayuda para extender nuestras secciones con relación a las ciencias informáticas.
Podemos obtener los ángulos de Euler de la matriz de rotación usando la siguiente fórmula.
Dada una matriz de rotación de 3×3
Los 3 ángulos de Euler son
Aquí atan2 es la misma función de arco tangente, con verificación de cuadrante, que normalmente se encuentra en C o Matlab.
Nota: Se debe tener cuidado si el ángulo alrededor del eje y es exactamente +/-90°. En ese caso, todos los elementos de la primera columna y la última fila, excepto el de la esquina inferior, que es 1 o -1, serán 0 (cos(1)=0). Una solución sería fijar la rotación alrededor del eje x en 180° y calcular el ángulo alrededor del eje z a partir de: atan2(r_12, -r_22).
Consulte también https://www.geometrictools.com/Documentation/EulerAngles.pdf, que incluye implementaciones para seis órdenes diferentes de ángulos de Euler.
Si R es la matriz de rotación (3×3), entonces el ángulo de rotación será acos((tr(R)-1)/2), donde tr(R) es la traza de la matriz (es decir, la suma de los elementos de la diagonal).
Eso es lo que pediste; Estimo un 90% de posibilidades de que no sea lo que quieres.
Para su referencia, este código calcula los ángulos de Euler en MATLAB:
function Eul = RotMat2Euler(R)
if R(1,3) == 1 | R(1,3) == -1
%special case
E3 = 0; %set arbitrarily
dlta = atan2(R(1,2),R(1,3));
if R(1,3) == -1
E2 = pi/2;
E1 = E3 + dlta;
else
E2 = -pi/2;
E1 = -E3 + dlta;
end
else
E2 = - asin(R(1,3));
E1 = atan2(R(2,3)/cos(E2), R(3,3)/cos(E2));
E3 = atan2(R(1,2)/cos(E2), R(1,1)/cos(E2));
end
Eul = [E1 E2 E3];
Código proporcionado por Graham Taylor, Geoff Hinton y Sam Roweis. Para obtener más información, consulte aquí
Ten en cuenta difundir este escrito si te ayudó.