我有一个从一个基到另一个基的旋转矩阵:
Rot = [0.1227 0.0269 -0.9921;...
0.8635 -0.4956 0.0934;...
0.4892 0.8681 0.0840];
我使用MATLABrotm2eul
函数来获得"ZYZ"约定中的欧拉角:
eulZYZ = rotm2eul(Rot,"ZYZ")
即CCD_ 2。如果我使用反函数eul2rotm
:
RotMATLAB = eul2rotm(eulZYZ,"ZYZ");
结果不同于Rot
(除了第三列(:
RotMATLAB =
-0.0406 0.1189 -0.9921
-0.8712 0.4819 0.0934
0.4892 0.8681 0.0840
发生了什么事?我想,一旦你指定了"ZYZ",就只存在一个旋转。
旋转矩阵通常被假设为具有行列式1
,但您的"旋转";矩阵Rot
有行列式det(Rot) = -1
,这意味着矩阵还包含(奇数(个反射,而不仅仅是旋转。
因此rotm2eul
没有希望为这个矩阵产生任何有意义的输出。试着做同样的事情,例如,首先将你自己的矩阵乘以反射矩阵,以确保Rot
具有行列式1
,就像一样
diag([1,1,-1])