function [alpha, beta, gamma] = dcm_to_euler(Q) % –––––––––––––––––––––––––––––––––––––––––––––--------------------------- % Esta función encuentra los ángulos de la secuencia clásica simetrica de % Euler dada por R3(gamma)*R1(beta)*R3(alpha) a partir de la matriz de % cosenos directores. % % Q - matriz de cosenos directores % alpha - primer ángulo de la secuencia (grados) % beta - segundo ángulo de la secuencia (grados) % gamma - tercer ángulo de la secuencia (grados) % % Función M del usuario requerida: ninguna % Sub-función requerida: atan2d_0_360 % –––––––––––––––––––––––––––––––––––––––––––––--------------------------- alpha = atan2d_0_360(Q(3,1), -Q(3,2)); beta = acosd(Q(3,3)); gamma = atan2d_0_360(Q(1,3), Q(2,3)); % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function t = atan2d_0_360(y, x) % –––––––––––––––––––––––––––––––––––––––––––––--------------------------- % Esta subfunción calcula el arco tangente de y/x en grados y coloca el % resultado en el rango [0, 360]. % t - ángulo en grados % % Funciones M del usuario requeridas: Ninguna % Sub-función requerida: ninguna % –––––––––––––––––––––––––––––––––––––––––––––--------------------------- if x == 0 if y == 0 t = 0; elseif y > 0 t = 90; else t = 270; end elseif x > 0 if y >= 0 t = atand(y / x); else t = atand(y / x) + 360; end elseif x < 0 if y == 0 t = 180; else t = atand(y / x) + 180; end end end % atan2d_0_360 % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ end % dcm_to_euler