matlab空间旋转,空间三维坐标轴旋转

根据在网上找的公式编的程序,不知道对不对

%设在OXY坐标系中,原点不动,坐标轴旋转而得到一新坐标系OX'Y'Z':

%OX'轴与OX,OY,OZ轴的正向夹角分别成:α1,  β1,  γ1角;

%OY'轴与OX,OY,OZ轴的正向夹角分别成:α2, β2, γ2角;

%OZ'轴与OX,OY,OZ轴的正向夹角分别成:α3, β3, γ3角;

%若M点在坐标系OXYZ和OX'Y'Z'下的坐标分别为:(X,Y,Z)和(X',Y',Z')则相应的旋转变换为:

%X=X'cos α1+Y'cos α2+Z'cos α3

%Y=X'cos β1+Y'cos β2+Z'cos β3

%Z=X'cos γ1+Y'cos γ2 +Z'cos γ3

%或者

%X'=Xcos α1+Ycos β1+Zcos  γ1

%Y'=Xcos α2+Ycos β2+Zcos  γ2

%Z'=Xcos α3+Ycos β3 +Zcos γ3

%本子函数中用a b c 表示上述公式中的α β γ

%sys1表示卫星在J2000惯性坐标系下的三轴指向,sys2表示slew之后的三轴指向

sys1.X=[1 0 0];

sys1.Y=[0 1 0];

sys1.Z=[0 0 1];

sys2.X=[0 1 0];

sys2.Y=[0 0 1];

sys2.Z=[1 0 0];

a1=acosd(sys2.X*sys1.X'/(norm(sys2.X)*norm(sys1.X)));

b1=acosd(sys2.X*sys1.Y'/(norm(sys2.X)*norm(sys1.Y)));

c1=acosd(sys2.X*sys1.Z'/(norm(sys2.X)*norm(sys1.Z)));

a2=acosd(sys2.Y*sys1.X'/(norm(sys2.Y)*norm(sys1.X)));

b2=acosd(sys2.Y*sys1.Y'/(norm(sys2.Y)*norm(sys1.Y)));

c2=acosd(sys2.Y*sys1.Z'/(norm(sys2.Y)*norm(sys1.Z)));

a3=acosd(sys2.Z*sys1.X'/(norm(sys2.Z)*norm(sys1.X)));

b3=acosd(sys2.Z*sys1.Y'/(norm(sys2.Z)*norm(sys1.Y)));

c3=acosd(sys2.Z*sys1.Z'/(norm(sys2.Z)*norm(sys1.Z)));

%从sys1到sys2的旋转矩阵为:

rotate_matrix=[cosd(a1) cosd(a2) cosd(a3);

cosd(b1) cosd(b2) cosd(b3);

cosd(c1) cosd(c2) cosd(c3)]';

%tt=sys1.X*rotate_matrix;

%tt2=sys1.Y*rotate_matrix;

%tt3=sys1.Z*rotate_matrix;

%将旋转矩阵转化为四元数

q = dcm2quat(rotate_matrix);

你可能感兴趣的:(matlab空间旋转)