我有一个应用程序,我必须使用 Matlab 将立方体围绕任意轴旋转角度 theta。我正在使用罗德里格斯旋转公式来实现这一点。请注意,我只对围绕立方体中心的旋转感兴趣,因此我指定的轴将通过中心。
以下是我执行此操作的代码:
%cube rotation
xc=0; yc=0; zc=0; % coordinates of the center
L=1; % cube size (length of an edge)
alpha=0.2;
% transparency (max=1=opaque)
Xmag=1;%specify the axis vector and the angle to rotate by
Ymag=1;
Zmag=1;
angle=30;
X = [0 0 0 0 0 1; 1 0 1 1 1 1; 1 0 1 1 1 1; 0 0 0 0 0 1];% define the cube coordinates
Y = [0 0 0 0 1 0; 0 1 0 0 1 1; 0 1 1 1 1 1; 0 0 1 1 1 0];
Z = [0 0 1 0 0 0; 0 0 1 0 0 0; 1 1 1 0 1 1; 1 1 1 0 1 1];
C= [0.5 0.1 0.1 0.1 0.1 0.1];
X = L*(X-0.5) + xc;% translate cube so that its center is at the origin
Y = L*(Y-0.5) + yc;
Z = L*(Z-0.5) + zc;
mag=sqrt(Xmag*Xmag+Ymag*Ymag+Zmag*Zmag);%find the unit vector correspoding to the axis vector
x=Xmag/mag;
y=Ymag/mag;
z=Zmag/mag;
th=0;
for count=1:0.01:angle
cla;
if(th<angle)
th=th+0.01;
end
c=cos(th); %rodrigues formula
s=sin(th);
t=1-cos(th);
for i=1:1:4
for j=1:1:6
Xnew_th(i,j)=X(i,j)*(t*x*x+c)+Y(i,j)*(t*x*y-s*z)+Z(i,j)*(t*x*y+s*y);
Ynew_th(i,j)=X(i,j)*(t*x*y+s*z)+Y(i,j)*(t*y*y+c)+Z(i,j)*(t*y*z-s*x);
Znew_th(i,j)=X(i,j)*(t*x*z-s*y)+Y(i,j)*(t*y*z+s*x)+Z(i,j)*(t*z*z+c);
end
end
fill3(Xnew_th,Ynew_th,Znew_th,C,'FaceAlpha',alpha); % draw cube
axis([-1 1 -1 1 -1 1]);
xlabel('X Axis');
ylabel('Y Axis');
zlabel('Z Axis');
%grid on;
view(3);% orientation of the axes
pause(0.02);
end
现在,我需要将这个关于任意轴的旋转反卷积到关于x-axis
、y-axis
和 的角度z-axis
。也就是说,我需要找到立方体必须围绕和轴转动的角度x
,以达到与使用罗德里格斯公式相同的最终状态。y
z
关于如何做到这一点的任何想法?或者,在构造旋转矩阵时,是否有任何其他公式而不是罗德里格斯公式考虑了围绕 x、y 和 z 轴的旋转角度?
谢谢!