オイラー角と四元数-内部ストレージとユーザーへの表示の間の緊張によって引き起こされる問題?

StackOverflow https://stackoverflow.com/questions/832805

質問

四元数は、オブジェクトの回転を内部的に表現するためのほぼ間違いなく適切な選択肢です。それらは、単一の方向を明確に補間および表現するためにシンプルかつ効率的です。

ただし、ユーザーインターフェースで四元数を表示することは一般に不適切です。オイラー角は一般にユーザーにとってはるかに馴染みがあり、値はもう少し直感的で予測可能です。

オイラー角はコードレベルで複雑になります-回転の順序を保存する必要があり、この順序と関連する角度を使用して実際の向き(行列または四元数)を構成することは、控えめに言っても面倒です。

信頼できる補間は、四元数表現を使用して最も便利に実行されます。つまり、オイラー表現と四元数表現の間で絶えず変換する必要があるということですか?これはパフォーマンスの観点から実現可能ですか?

オリエンテーションをクォータニオンとして保存し、ユーザーに表示するためだけに変換できますか?これは、特定の方向に対して、クォータニオン表現は1つだけですが、オイラー表現は多数あるため、不可能な場合があります。元々その方向を定義していた表現に対応するオイラー表現をどのように「選択」しますか?不可能な作業のように思えます-クォータニオンに変換するときに情報を事実上失いました。

オイラー角として保存し、必要に応じてクォータニオンに変換できますか?これはおそらくスケーラブルではありません-オイラー角から四元数への変換、補間、そして再び変換は比較的高価なコードになる可能性があります。

両方の表現を保存し、特定の状況に最も適した表現を使用できますか?メモリ(60個程度のボーンを持つスケルトンのアニメーションカーブを想像する)とこれらの値の同期を維持するという点で大きなコストは、高価であるか、少なくとも面倒です。

この問題の誰かを見たり、使ったり、賢い解決策を見つけたりしましたか?確かに上記の3つのオプションは1つだけではありませんか?これに似た他の問題ドメインはありますか? 解決済みですか?

役に立ちましたか?

解決

私は航空宇宙技術者です。私は、30年にわたって宇宙船の姿勢制御とナビゲーションに四元数を使用してきました。状況についての考えを次に示します。

  1. オイラー角で方向を変えるあらゆる種類のプロセスを実行することは不可能に迫っています。オイラー角は特異点の影響を受けます。他の角度が特異点を通過すると、角度は最大180度まで瞬時に変化します。オイラー角は、連続回転に使用することは事実上不可能です。四元数はこれらの問題のいずれにも悩まされません
  2. 可能性のある12の異なるオイラー角回転シーケンス-XYZ、XYX、XZYなどがあります。または" right"オイラー角のセット。一連のオイラー角を導出するには、使用している回転シーケンスを把握し、それに固執する必要があります。
  3. すべてのストレージおよび回転操作をクォータニオンで実行し、出力が必要な場合にのみクォータニオンをオイラー角に変換することをお勧めします。これを行うときは、使用するオイラー回転シーケンスを定義する必要があります。

これらのすべての操作およびその他のアルゴリズム:回転行列のオイラー角との間の四元数、回転行列(方向余弦行列)との間の四元数、端点または中間点での位置、レートなどに一致する四元数補間、四元数を使用した剛体および柔軟なボディダイナミクスおよび運動学。

私が支援できる場合は私に連絡してください nhughes1ster@gmail.com

他のヒント

私は四元数のファンです。それらを機能させるために、ユーザーへのプレゼンテーションを再検討できますか?回転をテキスト形式で一連のオイラー角としてユーザーに提示する代わりに、単純な3Dオブジェクトを選択し、四元数回転をオブジェクトに適用して、実際に回転を視覚的に表示できます。

コードでクォータニオンを使用せず、表示に必要なときにQをエンジェルに変換するのはなぜですか?

回転は、軸+回転角度として表すことができます。これは、基本的にクォータニオンと同じです(記号まで)

オイラー角を内部で使用するのは理にかなわないと思います。すべての計算に四元数を使用する必要があり、通常はどこでも変換を実行する余裕はありません。 UIのオイラー角に変換することに関しては、ユーザーが元の入力と同等であるが異なる表現の角度しか取得できない場合、それは悪いことでしょうか?変換を正しく行うと、「最も簡単」な結果になるはずです。任意のクォータニオンのオイラー角。

私たちが話しているコンバージョンの数。コンバージョンごとに約2つの超越的操作にお金を払っているように見えますが、最新のハードウェアでは1秒あたり100ミリオンのオーダーで利用可能です。精度と美観のためのクォータニオンと、ユーザー情報を保持するためのオイラー回転の両方を保存します。フラグを追加して、特定のオブジェクトに適したものを示すこともできます。さらに、ローテーションされたメンバーごとに1回だけ変換を実行する必要があります。変換行列を計算すると、頂点がなくなるまで乗加算されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top