120

私は物理学者であり、いくつかのプログラミングを学んでおり、行列/ベクトル形式で物事を書く代わりに、回転にクォータニオンを使用している多くの人々に出くわしました。

物理学では、クォータニオンを使用しない非常に良い理由があります(ハミルトン/ギブスなどについて時々語られる奇妙な話にもかかわらず)。物理学では、説明に優れた分析動作が必要です(これは正確に定義された意味を持ちますが、通常のイントロクラスで教えられるものをはるかに超える技術的な方法であるため、詳細には触れません)。クォータニオンにはこのような優れた動作がないことが判明したため、それらは有用ではなく、ベクトル/行列は有用であるため、これらを使用します。

ただし、解析構造を使用しない厳密な回転と記述に限定して、3D回転はどちらの方法(または他のいくつかの方法)でも同等に記述できます。

一般に、X 2 = X ' 2という制約に従って、点X =(x、y、z)を新しい点X'=(x'、y'、z')にマッピングする必要があります。そして、これを行うことはたくさんあります。

素朴な方法は、これが定義する三角形を描画して三角法を使用するか、点(x、y、z)とベクトル(x、y、z)の間の同型写像と関数f(X)=X'を使用することです。行列MX=X'、またはクォータニオンを使用する、または他の方法(x、y、z)T。(a、b、c)(x'、y'、 z')など。

数学の観点から、これらの説明はすべてこの設定で同等です(定理として)。それらはすべて、同じ数の自由度、同じ数の制約などを持っています。

では、なぜクォータニオンがベクトルよりも優先されるように見えるのでしょうか。

私が見る通常の理由は、ジンバルロックや数値の問題ではありません。

これはオイラー角の問題にすぎないため、ジンバルロックなしの議論は奇妙に思えます。これは座標の問題でもあり(極座標のr = 0での特異点(ジャコビアンはランクを失う)のように)、これは局所的な問題であり、座標を切り替えて縮退から回転することで解決できます。または2つの重なり合う座標系を使用します。

これらの両方(および代替案)がどのように実装されるかについては詳細にわからないため、数値の問題についてはよくわかりません。クォータニオンの再正規化は、回転行列の場合よりも簡単であることを読みましたが、これは一般的な行列の場合にのみ当てはまります。回転には、これを簡単にする追加の制約があります(これは、クォータニオンの定義に組み込まれています)(実際、自由度が同じであるため、これは真である必要があります)。

では、ベクトルや他の代替手段よりもクォータニオンを使用する理由は何ですか?

4

9 に答える 9

72

ジンバルロックが1つの理由ですが、あなたが言うように、それはオイラー角の問題であり、簡単に解決できます。3つの数値を格納するだけでよいため、メモリが問題になる場合でもオイラー角が使用されます。

クォータニオンと3x3回転行列の場合、クォータニオンにはサイズ(4スカラー対9)と速度(クォータニオン乗算は3x3行列乗算よりもはるかに高速)の利点があります。

これらの回転の表現はすべて実際に使用されていることに注意してください。オイラー角は最小のメモリを使用します。マトリックスはより多くのメモリを使用しますが、ジンバルロックの影響を受けず、優れた分析特性を備えています。クォータニオンは、軽量でありながらジンバルロックがないため、両方のバランスが取れています。

于 2012-01-18T23:38:21.883 に答える
43

物理学では、クォータニオンを使用しない非常に良い理由があります(ハミルトン/ギブスなどについて時々語られる奇妙な話にもかかわらず)。物理学では、説明に優れた分析動作が必要です(これは正確に定義された意味を持ちますが、通常のイントロクラスで教えられるものをはるかに超える技術的な方法であるため、詳細には触れません)。クォータニオンにはこのような優れた動作がないことが判明したため、それらは有用ではなく、ベクトル/行列は有用であるため、これらを使用します。

ええと、私も物理学者です。そして、クォータニオンが単に揺れる状況がいくつかあります!たとえば、球面調和関数。2つの原子が散乱し、電子を交換しています。軌道スピン移動とは何ですか?クォータニオンの場合、それは単なる乗算です。つまり、クォータニオンとして表されるSH基本関数の指数を合計します。(ルジャンドル多項式をクォータニオン表記にするのは少し面倒ですが)。

しかし、私は同意します。これらは普遍的なツールではなく、特に剛体力学では、使用するのが非常に面倒です。しかし、学生の質問でバートランドラッセルの答えを引用するには、物理​​学者がどれだけの数学を知る必要があるかということです。

とにかく:なぜ私たちはコンピュータグラフィックスのクォータニオンを愛するのですか?彼らは魅力的なプロパティの数を持っているので。まず、それらをうまく補間できます。これは、関節の周りの手足など、回転するものをアニメートする場合に重要です。クォータニオンでは、スカラー乗法と正規化だけです。これを行列で表現するには、sinとcosを評価してから、回転行列を作成する必要があります。次に、ベクトルにクォータニオンを乗算することは、完全なベクトル行列乗算を実行するのでさらに安価です。また、後で変換を追加すると、さらに安価になります。多数の頂点に対して多くの平行移動/回転を評価する必要がある、人間のキャラクターのスケルタルアニメーションシステムを検討する場合、これは大きな影響を及ぼします。

クォータニオンを使用することのもう1つの優れた副作用は、変換が本質的に正規直交であることです。変換行列では、数値の丸め誤差のために、アニメーションステップのカップルごとに再正規化する必要があります。

于 2012-01-19T10:20:34.687 に答える
37

これはオイラー角の問題にすぎないため、ジンバルロックなしの議論は奇妙に思えます。これは座標の問題でもあり(極座標のr = 0での特異点(ジャコビアンはランクを失う)のように)、これは局所的な問題であり、座標を切り替えて縮退から回転することで解決できます。または2つの重なり合う座標系を使用します。

オブジェクトの方向を定義するためにオイラー角を使用するような多くの3Dアプリケーション。特にフライトシムの場合、簡単に変更できる方法で方向を保存するための理論的に有用な方法を表しています。

また、「座標の切り替え、縮退からの回転、または2つの重複する座標系の使用」などはすべて努力が必要であることにも注意する必要があります。努力はコードを意味します。そして、コードはパフォーマンスを意味します。必要のないときにパフォーマンスを失うことは、多くの3Dアプリケーションにとって良いことではありません結局のところ、クォータニオンを使用するだけで必要なものがすべて得られるとしたら、これらすべてのトリックによって何が得られるのでしょうか。

これらの両方(および代替案)がどのように実装されるかについては詳細にわからないため、数値の問題についてはよくわかりません。クォータニオンの再正規化は、回転行列の場合よりも簡単であることを読みましたが、これは一般的な行列の場合にのみ当てはまります。回転には、これを簡単にする追加の制約があります(これは、クォータニオンの定義に組み込まれています)(実際、自由度が同じであるため、これは真である必要があります)。

方向の複数の連続した回転を処理する場合、数値の問題が発生します。宇宙に物体があると想像してみてください。そして、タイムスライスごとに、ヨーの小さな変更をそれに適用します。変更するたびに、向きを再正規化する必要があります。そうしないと、精度の問題が忍び寄り、物事を台無しにしてしまいます。

行列を使用する場合、行列の乗算を行うたびに、行列を再正規化する必要があります。直交化する行列はまだ回転行列ではないので、その簡単な直交化についてはあまり確信が持てません。しかし、私はこれについて確信することができます:

4Dベクトルの正規化ほど速くはありません。これは、クォータニオンが連続した回転の後に正規化するために使用するものです。

クォータニオンの正規化は安価です。特殊な回転行列の正規化でさえ、それほど安くはありません。繰り返しますが、パフォーマンスが重要です。

行列が簡単に実行できない別の問題もあります。2つの異なる方向の間の補間です。

3Dキャラクターを扱う場合、キャラクター内の各ボーンの位置を定義する一連の変換が行われることがよくあります。この骨の階層は、特定のポーズのキャラクターを表しています。

ほとんどのアニメーションシステムでは、特定の時間におけるキャラクターのポーズを計算するために、変換間を補間します。これには、対応する変換を補間する必要があります。

2つの行列の補間は...自明ではありません。少なくとも、最後に回転行列に似たものが必要な場合です。結局のところ、補間の目的は、2つの変換の途中で何かを生成することです。

クォータニオンの場合、必要なのは4Dlerpとそれに続く正規化だけです。これですべてです。2つのクォータニオンを取得し、コンポーネントを線形補間します。結果を正規化します。

より高品質の補間が必要な場合(場合によってはそうすることもあります)、球面ラープを引き出すことができます。これにより、より異なる方向に対して補間がより適切に動作するようになります。この計算ははるかに難しく、クォータニオンよりも行列に対してより多くの演算を必要とします。

于 2012-01-19T00:24:57.450 に答える
11

意見:クォータニオンは素晴らしいです。

回転行列: マイナーな欠点:行列の乗算は、クォータニオンよりも約2倍遅くなります。 マイナーな利点:行列とベクトルの乗算は約2倍速く、大きくなります。 大きな 欠点:正規化!Ghram-Shmitは非対称であるため、微分方程式を実行するときに高次の正確な答えは得られません。より洗練された方法は非常に複雑で費用がかかります。

軸(角度=軸の長さ) マイナーな利点:小さい。 中程度の欠点:trigを使用すると、乗算とベクトルへの適用が遅くなります。 中程度の欠点:すべての軸方向が何もしないため、長さ= 2*piでの北極の特異点。2piに近づいたときに自動的に再スケーリングするためのより多くのコード(およびデバッグ)。

于 2013-04-26T23:47:40.197 に答える
7

私が見る通常の理由は、ジンブルロックや数値の問題ではありません。

そして、それらは正当な理由です。

すでに理解しているように、クォータニオンは、オイラー3空間での3つの連続した回転とは対照的に、任意の軸の周りの単一の回転をエンコードします。これにより、クォータニオンはジンバルロックの影響を受けなくなります。

また、 SLERPのように、補間のいくつかの形式は素晴らしく、簡単に実行できるようになります。

...または2つの重複する座標系を使用します。

パフォーマンスの観点から、なぜソリューションが優れているのですか?

先に進むこともできますが、クォータニオンは使用できるツールの1つにすぎません。それらがあなたのニーズに合わない場合は、それらを使用しないでください。

于 2012-01-19T00:04:00.890 に答える
6

一般に、X ^ 2 = X'^ 2という制約に従って、点X =(x、y、z)を新しい点X'=(x'、y'、z')にマッピングする必要があります。そして、これを行うことはたくさんあります。

私たちは絶対にそれを望んでいません。多くの人が見逃している非常に重要な微妙な点があります。あなたが話している構造(三角形を描き、三角関数を使用するなど)は、一方のベクトルをもう一方のベクトルに正しく回転させます。しかし、これを行うローテーションは無限にあります。特に、あなたが回転を終えた後、私は一緒に来て、X'ベクトルの周りでシステム全体を回転させることができます。X'の位置はまったく変わりません。あなたのローテーションと私のローテーションの組み合わせは、別の単一のローテーションと同等です(ローテーションはグループを形成するため)。一般に、そのような回転を表現できる必要があります。

これは、ベクトルだけで実行できることがわかります。(これが回転の軸角度表現です。)しかし、軸角度表現で回転を組み合わせるのは困難です。クォータニオンは、他の多くのものとともに、それを簡単にします。基本的に、クォータニオンには他の表現のすべての利点があり、欠点はありません。(ただし、他の表現の方が適している特定のアプリケーションがある可能性があることは認めます。)

于 2013-02-14T01:45:31.563 に答える
6

回転に関連するすべてのプロパティは、実際にはクォータニオンのプロパティではないことに注意してください。これらは、3D回転を記述するために使用される実際の4要素構造であるオイラーロドリゲパラメータ化のプロパティです。

クォータニオンとの関係は、純粋にケイリーの論文「クォータニオンに関連する特定の結果について」によるものであり、著者はクォータニオンの乗算とオイラー・ロドリゲスのパラメーター化の組み合わせとの相関関係を観察しています。これにより、クォータニオン理論の側面を回転の表現、特に回転間の補間に適用できるようになりました。

あなたはここで論文を読むことができます:https ://archive.org/details/collmathpapers01caylrich 。しかし、当時、クォータニオンとローテーションの間に関係はなく、ケイリーはそこにあることにかなり驚いていました。

実際、公式は、M。Olinde Rodrigues Liouville、tv、 "Desloisgéométriquesquirégissentlesdéplacementsd'unsystèmesolide[...]"(またはComb。Math。Journal、t。 iii。p。224[6])。ここでこれらの係数の出現を先験的に説明することは興味深い質問です。

ただし、ローテーションにメリットをもたらすクォータニオンに固有のものはありません。クォータニオンはジンバルロックを回避しません。オイラー・ロドリゲスのパラメーター化はそうです。回転を実行するコンピュータプログラムのほとんどは、ファーストクラスの複雑な数学値であるクォータニオンタイプを実際に実装する可能性があります。残念ながら、クォータニオンの役割についての誤解がどこかに漏れており、かなりの数の困惑したグラフィックスの学生が複数の虚数定数を使用して複雑な数学の詳細を学び、なぜこれが回転の問題を解決するのかについて困惑しているようです。

于 2015-07-13T19:08:59.910 に答える
3

誰かが読むかもしれない答え:すべての表現には退屈な問題があります。クォータニオンは行列よりも小さいですが、クォータニオンの乗算は単なるベクトルドット積などではなく、実際、コンピューターでは2つの3x3マトリックスのドット積よりも時間がかかります。(コンピューターは通常の行列での操作が非常に得意です)

ただし、マトリックスには他の厄介な機能があります。たとえば、彼らは長期的には安定した生き物ではありません。3D空間で回転をモデル化する場合、通常、回転を互いの上に積み重ねて、方向マトリックスに蓄積します。これは、参照フレームの方向を格納する単一の回転マトリックスです。このプロセスは、何百万もの追加の過程で、O行列を厳密な回転行列形式から分岐させます。これは、マトリックスを定期的に再構成することで回避できますが、これが重要な場合があります。つまり、単位行列の回転なしの場合です。

回転の軸-角度表現(またはクォータニオン表現)を見つけて、その行列を再現する必要があります。ほとんどのアルゴリズムはゼロベクトルを生成し、この場合はゼロ分割に遭遇します。このような場合、a)フォークが遅く、b)計算機イプシロンが発生する可能性があるため、「if0then...」タイプのソリューションでこのような場合を回避することも一般的にはお勧めできません。特異性と恐ろしいエラーで終わります。

于 2019-11-21T07:30:03.777 に答える
0

ユニットクォータニオンは、3次元の直交群O(3)、特にそのサブグループである3次元の特殊直交群SO(3)のコンパクトな表現を提供します。これには多くの用途がありますが、私が最もよく知っているのは、加速器とジャイロのストラップダウン配置を使用する慣性航法システムでの使用です。SO(3)の要素は、地球上の車両の「位置」(または地球の表面に近い球)を表すために使用されます。別の要素は、車両の「姿勢」、つまり関係を指定するために使用されます。そのボディフレームのローカル接平面との。これらは両方とも、新しいデータで更新するために小さな変更(10Hz以下の時間増分)で「統合」されています。「姿勢」と「位置」の回転は、「結合された」差動システムを形成します。

クォータニオンはこの方法で簡単に統合できます(4つのクォータニオンの追加)。「統合」後、結果はSO(3)のメンバーではなくなりますが、単純な繰り込みにより、統合されたクォータニオンが再びSO(3)に「投影」されます。1つは、クォータニオンごとに4つの値のみを使用および保持します。

慣性航法を実現するためのクォータニオン統合の利用は、1980年代にはすでに業界標準でした。これを提案していることを私が知っている最初の論文は1973年に発表されました。当時、数学の学生は代数(非可換除算リング)の「奇妙な」例として四元数にのみ紹介されました。

ただし、クォータニオンは現在、多くのアプリケーション(コンピュータグラフィックスなど)でSO(3)の推奨される表現です。数学的な観点からは、「多様体の​​微積分」の最も単純な例を提供するため、さらに興味深いものになります。(球は単純な多様体であり、SO(3)はリー群です。)

于 2021-06-06T10:15:59.153 に答える