3
我使用两种方法在3D空间中旋转点(矢量)p0
。我有以黑色显示的世界坐标系(WCS)和以蓝色显示的坐标系1(CS1),其定义为围绕z轴旋转10度。我首先通过计算点积来计算WCS和CS1之间的方向余弦。现在我可以使用dcm2quat
和dcm2angle
轻松计算四元数和欧拉角。然后,我可以使用四元数和欧拉角来旋转点p0
。使用四元数和欧拉角的不同结果
p0 = [1 0 0]; % point in world CS
ijk = [1 0 0;0 1 0;0 0 1];
uvw1 = [0.9848 0.1736 0;-0.1736 0.9848 0;0 0 1.0000]; % CS1
DC01 = [dot(uvw1(1,:),ijk(1,:)) dot(uvw1(1,:),ijk(2,:)) dot(uvw1(1,:),ijk(3,:))
dot(uvw1(2,:),ijk(1,:)) dot(uvw1(2,:),ijk(2,:)) dot(uvw1(2,:),ijk(3,:))
dot(uvw1(3,:),ijk(1,:)) dot(uvw1(3,:),ijk(2,:)) dot(uvw1(3,:),ijk(3,:))];
[rz, ry, rx] = dcm2angle(DC01,'ZYX');
q1 = dcm2quat(DC01);
p1_1 = quatrotate(q1,p0);
p1_2 = (rotz(rz*180/pi)*roty(ry*180/pi)*rotx(rx*180/pi)*p0').';
但最后的结果是不同的:
p1_1 =
0.9848 -0.1736 0
p1_2 =
0.9848 0.1736 0
据我所知,使用欧拉角可导致万向节锁定,使不确定性,但在这种情况下,使用四元数得到的结果是不正确的而从欧拉角获得的结果是。我错过了什么? (蓝色),WCS(黑色),p0
(黑色),p1_1
(蓝色),p1_2
(红色)。