オブジェクトの回転と平行移動にデュアルクォータニオンを正しく使用するにはどうすればよいですか?


7

これまでは、回転に通常のクォータニオンを使用し、移動にベクトルを使用して、特定のオブジェクトの回転と移動を個別に処理していました。ただし、後でリジッドボディダイナミクスに使用する予定があるため、オブジェクトの移動と回転の両方を処理するためにデュアルクォータニオンを使用したいと思います。基本的にそれが欲しいので、最初のデュアルクォータニオンを持つオブジェクトを作成し、このデュアルに、変位の変化を表す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番目の双対の実数部の共役です。四元数。

ただし、この方法では希望する結果が得られません。私が得ている結果は予測可能です。それらは、私が探しているタイプではありません。つまり、ローカルローテーションですが、グローバル変換です。誰かがこれを行う正しい方法を教えてもらえますか?


最近、この記事iri.upc.edu/people/thomas/papers/IEEE-TRO-2014.pdfを見つけました。デュアルクォータニオンの使用を理解するのに大いに役立ちました。お役に立てれば。

回答:


3

まだ興味がある場合は、デュアルクォータニオン-基本的な変換のみ-前後(つまり、厳密な変換)を開始したい場合、初心者向けの論文をざっと見たいと思うかもしれません。

デュアルクォータニオンの初心者向けガイド:デュアルクォータニオンの概要、機能、および3Dキャラクタ階層での使用方法

リンク:http : //wscg.zcu.cz/wscg2012/short/A29-full.pdf

とりあえず、

サイモン


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.