2016-07-25 73 views
0

我已經看過三個單獨的公式,雖然他們大多是相同的,但我想知道爲什麼他們的符號不同。爲了說明,這裏的公式:將歐拉轉換爲四元數符號

共同守則

float xSin = Math::Sinr (x/2); 
float xCos = Math::cosr (x/2); 

float ySin = Math::Sinr (y/2); 
float yCos = Math::Cosr (y/2); 

float zSin = Math::Sinr (z/2); 
float zCos = Math::Cosr (z/2); 

Euclidean Space

X = xSin * yCos * zCos + xCos * ySin * zSin; 
Y = xCos * ySin * zCos + xSin * yCos * zSin; 
Z = xCos * yCos * zSin - xSin * ySin * zCos; 
W = xCos * yCos * zCos - xSin * ySin * zSin; 

Wikipedia

X = xSin * yCos * zCos - xCos * ySin * zSin; 
Y = xCos * ySin * zCos + xSin * yCos * zSin; 
Z = xCos * yCos * zSin - xSin * ySin * zCos; 
W = xCos * yCos * zCos + xSin * ySin * zSin; 

Microsoft XNA

X = xSin * yCos * zCos + xCos * ySin * zSin; 
Y = xCos * ySin * zCos - xSin * yCos * zSin; 
Z = xCos * yCos * zSin - xSin * ySin * zCos; 
W = xCos * yCos * zCos + xSin * ySin * zSin; 

你可以看到第一個具有+ + - -,第二- + - +和第三+ - - +。爲此,我已經規範了偏航俯仰,並將其轉換爲適當的XYZ對應物,但我不瞭解這些標誌的差異。

+1

有12個歐拉天使代表https://en.wikipedia.org/wiki/Euler_angles 可能你的來源使用不同的 – minorlogic

回答

0

它們很可能都是「正確的」,但是在陳述「歐拉角」和/或「偏航俯仰滾動」時存在多個不明確的來源。這可能會導致您所看到的符號差異。特別是需要指定三個旋轉中每一個所圍繞的軸。

對於從歐拉角到旋轉矩陣(如果你喜歡那些),我發現G. Slabaugh Computing Euler angles from a rotation matrix的文章有用且不會太長。你仍然需要convert from rotation matrix to quaternion,但是這是完全符合四元數的標誌。

除非你想深入數學,否則你最好堅持一個軟件包使用的定義,它可以在它的首選歐拉角和四元數之間來回轉換。