2016-08-03 60 views
3

我使用兩種方法在3D空間中旋轉點(矢量)p0。我有以黑色顯示的世界座標系(WCS)和以藍色顯示的座標系1(CS1),其定義爲圍繞z軸旋轉10度。我首先通過計算點積來計算WCS和CS1之間的方向餘弦。現在我可以使用dcm2quatdcm2angle輕鬆計算四元數和歐拉角。然後,我可以使用四元數和歐拉角來旋轉點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(紅色)。

回答

0

在MATLAB:

如果使用定向餘弦或四元數,以便以旋轉點,我實際上旋轉參照幀:

pdc = (DC01*p0')' % rotation using directional cosine matrix 
pdc = 

    0.9848 -0.1736   0 

等效於:

p1_1 = quatrotate(q1,p0); 
p1_1 = 

    0.9848 -0.1736   0 

另一方面,使用歐拉角和旋轉矩陣,我可以w.r.t的座標系旋轉的點(矢量):

p1_2 = (rotz(rz*180/pi)*roty(ry*180/pi)*rotx(rx*180/pi)*p0').'; 
p1_2 = 

    0.9848 0.1736   0 

結論: 使用四元數或定向餘弦矩陣,我們旋轉座標系,而點(矢量)保持固定。而使用旋轉矩陣,我們能夠將矢量旋轉到座標系。