Matlabを使用して角度シータで任意の軸を中心に立方体を回転させる必要があるアプリケーションがあります。これを実現するために、ロドリゲスの回転式を使用しています。立方体の中心を中心とした回転のみに関心があることに注意してください。したがって、指定した軸は中心を通過します。
以下は、これを行う私のコードです:
%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
ます。つまり、Rodrigues の公式を使用して行ったのと同じ最終状態を達成するために、立方体がx
、y
および軸を中心に回転しなければならない角度を見つける必要があります。z
これを行う方法についてのアイデアはありますか?または、Rodrigues 式の代わりに、回転行列を構築する際に x、y、および z 軸を中心とした回転角度を考慮に入れる他の式はありますか?
ありがとう!