2013-12-13 44 views
1

我正在使用食人魔的四元數。
每個幀獲得:四元的食人魔差異

Ogre::Quaternion prev; 

bool frameStarted(const Ogre::FrameEvent& event) { 
    const Ogre::Quaternion q = object->getOrientation(); 
    if(abs(q.x - prev.x) > ...) { 
     /* do something */ 
     prev = q; 
    } 
} 

如何檢查如果X旋轉在時間T + 1大於X旋轉少180°在時間T?

回答

2

我真的不明白你想要做什麼與四元的x成員。如果有的話你正在比較不同旋轉軸的x座標。

但是,如果我得到的問題是正確的,你正在尋找圍繞x軸的旋轉角度的差異。在這種情況下,http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles解釋瞭如何將四元數轉換爲歐拉角,這將依次給出每個典範基向量(X,Y和Z)周圍的旋轉角度。然後等於比較歐拉角度(記住它們將以弧度表示,所以使用pi而不是180)。

+1

我已經看到了維基鏈接,但我無法解決它... –

+0

對不起,週末在這裏總會遇到壓力。它是「轉換」一節中的最後一個等式,您在此專門查找phi的值(可以使用pi和x軸輕鬆檢查,得到四元數(0,(1,0,0 )),因此這個公式簡化爲一個atan2(0,-1),它給出了預期的pi值,所以如果你想看看**旋轉角度相對於x軸的差值**是否小於180°,看起來像:http://pastebin.com/YwFF4Tvy –