2016-04-22 18 views
1

2つの任意の座標系の6つの単位ベクトル(X/Y/Z軸を表す)があります。第2の座標系のベクトル値は、第1のシステムに基づいている。私はあるシステムを他のシステムに回転させて、一致する四元数を返す必要があります。これをC++で行う最も合理的な方法は何でしょうか?6ベクトルからのクォータニオン(1つの座標系を別の座標系に回転)

y-up/z-up/left-/ right-handedシステムをお互いに変換することについて話しているので、残念ながら、これは6つの単位ベクトルの汎用ソリューションにする必要があります。どんな洞察にも感謝します。

+0

'C++でこれを行うには最も合理的な方法は何ですか?' https://en.wikipedia.org/wiki/Euler_angles、明らかに –

+0

@SeverinPappadeuxオプションはありません。私はジンバルロックオイラー角を使用する前に – broozar

答えて

2

直交ベクトル3つは回転行列3x3です。 2つの行列を構築し、相対回転をr_relative = r1.transpose()* r2として見つけることができます。

テストされた任意のlibを使用して、変換行列が四元数に変換されます。

または両方の回転がクォータニオンに変換し

q_relative = q1.inverted()* Q2。

+0

ありがとう!これはモーショントラッキングと骨の向きに関するものなので、昨日私の現在の骨の向きを階層の前のものに関連付けるという情報を追加して、昨日あなたがお勧めするものを確認しました。 [link](http://publicationslist.org/data/melslater/ref-266/p175-spanlang.pdf)3.1、第2欄 – broozar

関連する問題