クォータニオンとは何ですか?また、2D平面上の3点を使用してどのような利点が得られますか?最後に、四元数を使用することはいつ良い習慣と見なされますか?
クォータニオンとは何ですか?また、2D平面上の3点を使用してどのような利点が得られますか?最後に、四元数を使用することはいつ良い習慣と見なされますか?
回答:
数学的には、クォータニオンは4次元の複素数です。ただし、ゲーム開発では、クォータニオンを使用して、エンコードによって3D空間の回転を記述することがよくあります。
この情報はクォータニオン内のサインとコサインでエンコードされているため、一般的にクォータニオンの内部コンポーネント(xyzw)を個別に明示的に設定または読み取らないでください。そのようにして間違いを犯すと、意味のない結果が得られやすくなります。四元数数学ライブラリは通常、四元数を操作する関数を提供します(たとえば、オイラー角または軸角への変換、およびオイラー角からの変換など)。
回転を説明する別の方法は、3つの固定軸のx、y、z(別名オイラー角)の周りをどれだけ回転するかを記述することです。ただし、オイラー角はジンバルロックと呼ばれる問題の影響を受けますます。1つの軸を中心に90°回転すると、他の2つの軸は等価になります。クォータニオンでは、この問題は発生しません。
3D空間で回転を表現する別の方法は、4x4 変換行列を使用することです。しかし、変換マトリックスを使用すると、回転だけでなく、拡大縮小、平行移動、傾斜もできます。あなただけが欲しいとき回転、マトリックスは過剰になり、クォータニオンははるかに迅速で単純なソリューションになります。
この問題は3D空間にのみ関係します。2D空間では、回転軸は1つだけです。回転は、単一の浮動小数点数または単一の複素数で表現できるため、この問題は発生しません。理論的には、軸が平面を指す(または平面から出る)クォータニオンを持つ2D平面上の回転を表現できますが、通常は過剰です。
これは、@ Philippの答えに追加することです。
また、2D平面上の3点を使用してどのような利点が得られますか?
あなたが興味を持っているすべてが回転している場合は、本当に四元数を必要としない上、すなわち平面について z軸。この場合、必要なのはヨー角だけであり、z軸を中心とした連続した回転が可能であるという事実を活用できます。したがって、ローテーションは任意の順序で適用できます。
XY平面ではない平面上で回転している場合、状況は異なります。この回転は、任意の3D軸を中心に回転することに相当します。現在、2つの選択肢があります。
XY平面と一致するように平面を3Dで回転し、ヨーし、逆変換する、または
回転は最初は3Dであると考えてください。
2番目の選択肢はコーディングが簡単です。@Philippが言ったように、クォータニオンはジンバルロックを回避します(中間のRPYまたは軸/角度の変換を回避する場合)。
最後に、四元数を使用することはいつ良い習慣と見なされますか?
3D回転がある場合は常に、クォータニオンを使用することをお勧めします。
例えば: