theta=acos((trace(R)-1)/2);
if trace(R)==3
vec = [0 0 0];
axang=[0 0 0 0];
vec(1)=R(3,2)-R(2,3);
vec(2)=R(1,3)-R(3,1);
vec(3)=R(2,1)-R(1,2);
vec=(1/(2*sin(theta)))*vec;
axang = [vec, theta];
elseif trace(R)==-1
vec=[0 0 0;0 0 0];
axang=[0 0 0 0;0 0 0 0];
X=[0 0];
Y=[0 0];
Z=[0 0];
Y(1)=sqrt((R(2,2)+1)/2);
Y(2)=-Y(1);
X(1)=R(2,1)/(2*Y(1));
X(2)=R(2,1)/(2*Y(2));
Z(1)=R(2,3)/(2*Y(1));
Z(2)=R(2,3)/(2*Y(2));
vec(1,:)=[X(1) Y(1) Z(1)];
vec(2,:)=[X(2) Y(2) Z(2)];
axang(1,:)=[vec(1,:), theta];
axang(2,:)=[vec(2,:), theta];
else
vec = [0 0 0];
axang=[0 0 0 0];
vec(1)=R(3,2)-R(2,3);
vec(2)=R(1,3)-R(3,1);
vec(3)=R(2,1)-R(1,2);
vec=(1/(2*sin(theta)))*vec;
axang = [vec, theta];
end
所以這是我的代碼,但是當旋轉矩陣如何將旋轉矩陣轉換爲軸角形式?
R = [-1 0 0;
0 -1 0;
0 0 1]
什麼是錯的代碼,它不工作? axang
是一個向量,用於存儲前三個位置的軸和最後一個位置的角度。
提供的旋轉矩陣和軸角形式之間的關係。你是什麼意思*「沒有工作」*。任何錯誤?錯誤的輸出?什麼?閱讀如何相應地創建[MCVE]和[編輯](https://stackoverflow.com/posts/44874441/edit)您的問題。 –
啊。 @SardarUsama謝謝。新的堆棧溢出。無論如何解決了我的問題。在一個案例中,我除以0。當你說'提供旋轉矩陣和軸角形式之間的關係'時,你最終幫助了我。不管怎麼說,還是要謝謝你。 –