但是matlab结果:
>> R2=rpy2r(0.1,0.2,0.3)
R2 =
0.9363 -0.2751 0.2184
0.2896 0.9564 -0.0370
-0.1987 0.0978 0.9752
>> [theta,v]=tr2angvec(R)
theta =
0.3655
v =
0.1886 0.5834 0.7900
>> [v,lambda]=eig(R)
v =
0.6944 + 0.0000i 0.6944 + 0.0000i 0.1886 + 0.0000i
-0.0792 - 0.5688i -0.0792 + 0.5688i 0.5834 + 0.0000i
-0.1073 + 0.4200i -0.1073 - 0.4200i 0.7900 + 0.0000i
lambda =
0.9339 + 0.3574i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.9339 - 0.3574i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 + 0.0000i
如图所示,相同的函数给出不同的输出,有其他人发现同样的问题吗?
我看不懂中文,但显然函数
tr2angvec
只返回一个旋转角度及其对应的向量。 Matlab 的 eig
返回特征向量的完整矩阵和具有特征值的对角矩阵。
因此,
eig
给出的最后一列是tr2angvec
提供的向量。请注意, theta=0.3655
而实特征值是 1(因为旋转不会改变长度)。然后请注意,虚部特征值的实部是 0.9339
,以及 acos(0.9339)=0.365626358 rad
。
然后回想一下旋转矩阵的虚部特征值是
cos(theta) + i sin(theta)
和 cos(theta) - i sin(theta)
。