これまでは、回転に通常のクォータニオンを使用し、移動にベクトルを使用して、特定のオブジェクトの回転と移動を個別に処理していました。ただし、後でリジッドボディダイナミクスに使用する予定があるため、オブジェクトの移動と回転の両方を処理するためにデュアルクォータニオンを使用したいと思います。基本的にそれが欲しいので、最初のデュアルクォータニオンを持つオブジェクトを作成し、このデュアルに、変位の変化を表す2番目のデュアルクォータニオンを掛けて、変更が適用された後の最終的な位置を表す3番目のデュアルクォータニオンで終わります。特定のオブジェクト(例として球体を使用します)が自身の重心を中心にローカルに回転し、グローバルに移動するようにします。これは、デュアルクォータニオンを使用して達成されたと思われるタイプのモーションのビデオです。
http://www.youtube.com/watch?v=k9I7Bbj02O8
残念ながら、この例のソースコードへのリンクは読み込まれません。今、私はこれを数回動作させようとしましたが、変位しているオブジェクト(ここでも球体)はグローバルに移動しますが、ローカルには回転しませんか、ローカルに回転しますがグローバルには移動しません(その動きは、回転します)。基本的にこれは私がやっていることを要約しています:
1)プログラムの最初に、位置と回転を表す最初のデュアルクォータニオンを持つオブジェクトがあります(このクォータニオンをQ1と呼びます)。
2)オブジェクトの回転速度または並進速度を変更します。これから、回転と加速度の変化を表す2番目の四元数Q2を計算します。
3)次に、2つの四元数を乗算します(この時点では両方の乗算の次数を試しましたが、正しい次数はQ2 * Q1になるはずです)。それらを乗算するために使用している式は、Q1 * Q2 = r1 * r2 + e(r1 * d2 + d1 * r2)です。
4)この時点で、オブジェクトの新しい位置と方向を説明する3つ目のデュアルクォータニオンがあります。双対の実数部はその向きを表すクォータニオンであり、双対部は式t = 2 * dual *(real ')を使用して変換ベクトルに変換できます。ここで、実数'は3番目の双対の実数部の共役です。四元数。
ただし、この方法では希望する結果が得られません。私が得ている結果は予測可能です。それらは、私が探しているタイプではありません。つまり、ローカルローテーションですが、グローバル変換です。誰かがこれを行う正しい方法を教えてもらえますか?