四元数とオイラー角に関する別の記事

仕事のために、オブジェクトの座標をオイラー角から四元数に、またはその逆に変換する必要がありました。



トライアル中に、オイラーの四元数とコーナーに特化したHabrに関するいくつかの記事、ウィキペディア、および単にさまざまな大学のマニュアルと記事を読む必要がありました。 便宜上、Habrの記事へのリンクを提供します。



トリッキー四元数

四元数によるベクトルの回転に関する注意

ダミーの四元数

ツイストとツイスト、混乱したいです。 オイラー角とジンバルロック



オイラー角を四元数に、またはその逆に変換する公式はありますが、



問題の本質を簡単に説明します。



  1. 3次元空間の物体には、3つの座標と3つの回転角度の6つの自由度があります。
  2. たとえば、座標が(4,5,2)であれば、これは、X軸に沿って+4単位、Y軸に沿って+5単位、軸に沿って+2単位だけ、本体を原点に対してシフトする必要があることを意味しますZ.シフトの順序は重要ではありません。 最初にXで、次にYで、次にZでシフトするか、別の順序でシフトできます。 金額は、条件の場所の変更から変更されません。
  3. ターンでは、すべてがはるかに悪いです。 時々、3つの軸の周りに回転角度を設定するだけで十分であると感じるかもしれません(たとえば、オブジェクトをX軸の周りに180度、Y軸の周りに180度、Z軸の周りに90度回転します-順番は変わりません-結果は同じになります)。 このtrapは、90度や180度などの角度で操作するのが最も簡単であり、非常に特殊なケースであるために発生します。 一般に、ターンの順序は重要です。


しかし、用語の場所の再配置によって合計が変わらないという法律についてはどうでしょうか? 事実、数ターンの構成はベクトルの合計(並列転送操作の場合のように)ではなく、積に対応しています。 また、積は単なる数値ではなく、特殊なオブジェクト(たとえば回転行列)であり、「通常の」乗算の可換性は適用されません。 回転軸の選択順序と、軸がオブジェクトと一緒に回転するか、オブジェクトのみが回転するかに応じて、24種類のターンの記述を区別できます。 多くの場合、軸の周りの回転角はオイラー角と呼ばれます。 時々、いくつかのソースでは、これらの角度は、回転が異なる3つの軸すべて(Tate-Brian角)、または最初と最後の軸が同じかどうかに応じて、Tate-Brian角またはEuler角と呼ばれます。 これらの角度は、軸が静止している場合、または軸がオブジェクトと一緒に回転する場合、軸が静止している場合、または軸の回転角と呼ばれます。

混乱しないように、ここですべてのタイプの回転を行います。

テートブライアン、国内:

ZYXr; YZXr; XZYr; ZXYr; YXZr; XYZr。

オイラー、内部:

XYXr; XZXr; YZYr; YXYr; ZXZr; ZYZr。

テートブライアン外部:

ZYX; YZX; XZYs; ZXY; YXZ; XYZ。

オイラー外部:

XYX; XZX; YZYs; YXY; ZXZ; ZYZ。

たとえば、外部コーナーは内部読み取りを逆方向に補完します。たとえば、XYXs形式の外部オイラー角10、20、30度は、XYXr形式の内部オイラー角30、20、10度と同じです。



実際、これはすでに何度も言われています。 なぜ新しい記事を書くのですか? 事実、オイラーの角から四元数へ、またはその逆への変換方法に関する情報はそれほど多くありません。 また、ほとんどの場合、1または2、3、6のオイラー角系のみが説明されています。 しかし、24個すべてではありません。また、類推すると、残りを導き出すことは非常に簡単ではありません(間違えないように)。 「真実を掘り下げる」中に、コーナーからクォータニオンまでいくつかのオンラインコンバーターを見つけることができました。変換能力が向上する方向によって、さらに多くのオプションがそのまま残されていることがわかります。

quat.zachbennett.com-コーナーの一種

energid.com-角度の一種

onlineconversion.com-角度の一種

quaternions.online-3種類の角度

andre-gaschler.com-6種類の角度



24種類すべての角度の変換の説明を見つけることができる唯一の場所は、Graphics Gems IVです。 この本のソースコードリポジトリは、Graphics Gems IV本のソースです 。 オイラー角から四元数へ、またはその逆への変換コードについて説明する場合、リポジトリ内のこれらのソースは次のとおりです。... / GraphicsGems / gemsiv / euler_angle。 ただし、1つの欠点があります。角度と四元数を計算するための最も一般的な関数を作成するために、著者はコードを大幅に複雑にしました。 つまり コードは非常にコンパクトであることが判明しましたが、他の言語への翻訳や特定のケースの最適化にはあまり適していません。 24のケースすべてに対処する必要があったため、このコードを少し調査し、一連の単純なケースに展開する必要がありました。 また、小さなユニットテストを作成し、コードが正しく機能することを確認しました。 なぜなら これらの単体テストは、Graphics Gemsブックのソースコードからコンパイルされたコードを使用するため、アップロードしませんでした(単体テスト)。



記事の本文でソースを提供しません(Octave言語で書かれています)。 リポジトリへのリンクのみを提供し、その内容についてコメントします



eul_to_quat.m- MATLAB関数eul2quatの類似物

quat_to_eul.m- MATLAB関数quat2eulの類似物



両方の機能はOctaveでは使用できません。 Matlabは、固定軸上で6種類のオイラー角のみをサポートします。 私の実装では、24種類すべてがサポートされています。 さらに、末尾に文字rが付いたタイプ(XYZrなど)は、軸がオブジェクトとともに回転することを意味します。 末尾に文字sがあるタイプ(たとえば、XYZ)は、軸が静止したままであることを意味します。



All Articles