0

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 の公式を使用して行ったのと同じ最終状態を達成するために、立方体がxyおよび軸を中心に回転しなければならない角度を見つける必要があります。z

これを行う方法についてのアイデアはありますか?または、Rodrigues 式の代わりに、回転行列を構築する際に x、y、および z 軸を中心とした回転角度を考慮に入れる他の式はありますか?

ありがとう!

4

1 に答える 1

1

1.) 3D では、ある方向から別の方向に移動するための無限の量の回転があります。2.) これを克服するための 1 つのアプローチは、オイラー角
などの標準的な角度のセットに同意することです。 3.) オイラー角を見つける方法は、たとえばここで説明されています。 4.) 立方体が 、 に関して既に回転している可能性があることを考えると、角度を 2 回計算することを検討する必要があります。最初の位置に対して 1 回、結果の位置に対して 1 回です。角度のデルタが探しているものになります。

xyz

編集
オイラー角に関するウィキペディアのエントリから:

逆余弦関数は、引数に対して 2 つの可能な値を生成することに注意してください。この形状記述では、解の 1 つだけが有効です。オイラー角が一連の回転として定義されている場合、すべての解が有効になりますが、角度範囲内には 1 つしかありません。これは、範囲が事前に定義されていない場合、ターゲット フレームに到達するための回転のシーケンスが一意ではないためです。

これについては、この記事で詳しく説明しています。

于 2013-06-18T15:01:12.693 に答える