MATLAB 中的欧拉角差异

sti*_*eer 4 math matlab rotational-matrices

我有一个从一个基础到另一个基础的旋转矩阵:

 Rot = [0.1227    0.0269   -0.9921;...
        0.8635   -0.4956    0.0934;...
        0.4892    0.8681    0.0840];
Run Code Online (Sandbox Code Playgroud)

我使用 MATLABrotm2eul函数获取“ZYZ”约定中的欧拉角:

eulZYZ = rotm2eul(Rot,"ZYZ")
Run Code Online (Sandbox Code Playgroud)

这是 -0.0938 -1.4867 -1.0577. 如果我使用反函数eul2rotm

RotMATLAB = eul2rotm(eulZYZ,"ZYZ");
Run Code Online (Sandbox Code Playgroud)

结果不同于Rot(第三列除外):

RotMATLAB =
   -0.0406    0.1189   -0.9921
   -0.8712    0.4819    0.0934
    0.4892    0.8681    0.0840
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?我认为一旦你指定了“ZYZ”,就只存在一个轮换。

fla*_*awr 6

旋转矩阵通常被假定为具有 determinant 1,但您的“旋转”矩阵Rot具有 determinant det(Rot) = -1,这意味着您的矩阵还包含(奇数)次反射,而不仅仅是旋转。

所以没有希望rotm2eul为这个矩阵产生任何有意义的输出。尝试通过例如首先将您自己的矩阵乘以反射矩阵来确保Rot具有行列式1,例如

 diag([1,1,-1])
Run Code Online (Sandbox Code Playgroud)