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
C'était donc mon code, mais il ne fonctionne pas lorsque la matrice de rotation estComment convertir une matrice de rotation en forme d'angle d'axe?
R = [-1 0 0;
0 -1 0;
0 0 1]
Quel est le problème avec le code? axang
est un vecteur qui stocke l'axe dans les trois premières positions et l'angle dans la dernière position.
Fournir la relation entre la matrice de rotation et la forme de l'angle d'axe. Que voulez-vous dire par * "ne fonctionnait pas" *. Une erreur? mauvaise sortie? quelle? Lisez comment créer un [MCVE] et [modifier] (https://stackoverflow.com/posts/44874441/edit) votre question en conséquence. –
Aah. @SardarUsama merci. Nouveau pour le débordement de pile. Correction de mon problème quand même. Je divisais par 0 dans un cas. Tu as fini par m'aider quand tu as dit 'Prévois la relation entre la matrice de rotation et la forme de l'angle de l'axe'. Merci quand même. –