2016-07-25 13 views
0

私は3つの別々の公式を見てきましたが、それらはほとんど同じですが、なぜその符号が異なるのだろうと思います。ここでは、説明するために、式は以下のとおりです。オイラーからクォータニオン符号への変換

共通コード

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

「オイラーアングル」および/または「ヨーピッチロール」と書かれている場合、それらはすべて「正しい」ものですが、いくつかの曖昧さがあります。これは、あなたが見ているサインの違いを引き起こす可能性があります。特に、3つの回転のそれぞれが起こる軸を指定する必要があります。

オイラー角から回転行列への移行については、私が論文を見つけたのはG. Slabaugh Computing Euler angles from a rotation matrixで、それほど長くはありません。あなたはまだconvert from rotation matrix to quaternionにする必要がありますが、これはクォータニオンのサインまで十分に定義されています。

数学を深く理解したいのでなければ、1つのソフトウェアパッケージで使用される定義に従うことをお勧めします。このソフトウェアパッケージは、好ましいオイラー角とクォータニオンの間で前後に変換できます。

関連する問題