image thumbnail
from Euler/Fixed Angles Properties by Husam Aldahiyat
Graphical display of Euler and Fixed Angles

s=eul(T,str)
function s=eul(T,str)
% EUL obtain Euler Angles from R Matrix
% 
% Example: 
% >>T = [-0.30619     -0.91856         0.25;
%        0.88388     -0.17678      0.43301;
%       -0.35355      0.35355      0.86603];
% 
% >>s=eul(T,'zyz') 
% s =  
%     g: 0.7854
%     a: 1.0472
%     b: 0.5236
% 
% Example:
% >>a = 0.5;
% >>b = 0.7;
% >>g = pi/3;
%
% >>T = rotx(a)*roty(b)*rotz(g);
%
% >>s=eul(T,'xyz')
% s =  
%     g: 1.0472
%     a: 0.5
%     b: 0.7
% 
% 

s=struct;

% convert from xyz to 123
con=double(str)-119;

% get gamma
sign2=round(((con(1)==con(3))*(-2*((~(~(con(3)-con(2)+1)))*...
	(~(~(con(3)-con(2)-2))))+1))+~(con(1)==con(3)));

sign1=round(~(isequal(con(1),con(3)))*-2*(any(diff(con)==1))+1);

s.g=atan2(sign1*T(con(1),con(2)),sign2*T(con(1),6-sum([con(3),con(2)])));

% get alpha
sign2=sign2-(~(con(3)-con(1)))*2*sign2;

s.a=atan2(sign1*T(con(2),con(3)),sign2*T(6-sum([con(1),con(2)]),con(3)));

% get beta
T1=eval(['T/rot',str(3),'(',num2str(s.g),')']);

sign1=~(con(2)-1)*2-1;

s.b=atan2(sign1*T1((~(con(2)-3)-1)*-2+1,1-(~(con(2)-2)-1)),...
	T1((~(con(2)-3)-1)*-2+1,(~(con(2)-3)-1)*-2+1));

end

Contact us at files@mathworks.com