ねじれ、ねじれ、混乱させたい:オイラーとジンバルのロックコーナー





左手の指を前方に置きます。 恥ずかしがらずに、誰もあなたを笑わないようにしましょう。 これは重要な実験用です。 我慢して? 今、あなたがあなたの指(そしてせん妄)であると想像してください。 直角に右に曲がってから上に曲がり、最後に左に曲がります。 どこで終わりましたか? 右、同じ場所にありますが、すでに背面にあります。



ある程度の伸縮がある場合、これがオイラー角を使用した回転の仕組みです。 少し予測不能で不快ではありませんか? オイラー角にはいくつかの欠点がありますが、特に悪い特性があるため、それらに接触することは望ましくありません。 彼の名前はジンバルロックです。



ロシア語では、ジンバルロックの呼び方が異なります:ヒンジロック、車軸ロック、折りたたみフレーム。 残念ながら、このようなキーワードを使用した検索エンジンでの検索では、大量のゴミが出てくるため、ウィキペディアの記事には多くの要望が残されているため、私自身でこの現象について説明し、対処方法を提案します。



注意! 猫の下に行くと、頭を痛める危険があります。



まず、オイラー角が何であるかを思い出させてください。 おそらく、これはX、Y、Z軸を中心とした3つの回転角のセットのようなものであることを覚えていますか? あまり好きではありません。 オブジェクトを回転させ、一連の終了角度(X:45°、Y:45°、Z:45°)があるとします。 オイラーコーナーのコツの1つは、ターンの順序を1つ選択する必要があることです。 最初にX軸を中心に45度、次にYを中心に、最後にZを中心に回転すると、下図の左半分のように結果が得られます。 順序がZXYの場合、結果は右半分のように異なります。





実際に...
実際、上記ではオイラー角だけでなく、 テート-ブライアン角についても説明しています。 オイラー角には多くの紛らわしいバリエーションがあり、そのうちのいくつかはグローバル軸を中心に回転する必要があり、他の軸は各ステップの後に回転し、3番目の軸は常にオブジェクト自体に固定され、一緒に移動します 他のすべてに、ターンの異なる順序が追加されます。 可能であれば、オイラー角を使用しないでください。



ヒンジロックの外観の場所は、回転順序の選択に依存します。 これは何? たとえば、次の順番を取ります:ZXY。 X軸の周りの回転が90°または-90°に等しい場合、ZおよびYの周りの回転は互いに「食べ」、より大きな回転のスタブのみが残ります。 たとえば、(X:90°、Y:90°、Z:90°)は単純になります(X:90°、Y:0°、Z:0°)。 イラストへの注意。







(X:90°、Y:130°、Z:140°)または(X:90°、Y:30°、Z:40°)を代用することもできますが、結果は(X:90° 、Y:0°、Z:10°)。 少し直感的ではありませんか? これはすべて、ヒンジロックによるものです。 X軸の周りの回転が90°または-90°になると、未使用のローカル回転軸YはZ軸に平行になりますが、反対方向になります。



*クジラ!*



これは特に印象的な読者の頭を爆発させました。 同じことを矢印で説明します。







軸が一致すると、1つの自由度が失われます。 これがヒンジロックです。 曲がりたいが、曲がるのに十分な軸がない。



回転ロックの中央にヒンジロックが表示されます。 XYZまたはZYX順序を使用する場合、右または左に回すとアニメーションがジャムします。 このようなターンは、たとえば天頂または直下に向かうターンよりもはるかに一般的であるため、多くのプログラムはZXYシーケンスを使用します。 Unity3dでは、このような回転の階層が使用されますが、すべての回転の内部は依然としてクォータニオンに格納されています。 クォータニオンとは何ですか? これについては個別に話した方が良いでしょう。 クォータニオンと回転行列は、ヒンジロックを回避する1つの方法です。 キャッスルサイドをスムーズにバイパスするトリッキーなアルゴリズムもありますが、これはアニメーションの品質に影響します。 オイラー角は、プロペラ、ホイール、振り子などの単純な場合にのみ使用するのが最適です。 ターンの階層を変更できる場合もありますが、それでも城を覚えておく必要があります。



以下のリンクでは、ジャイロスコープの例を使用して、ヒンジロックのインタラクティブなデモを見ることができます。 彼と一緒に、ターンの階層と城の状況を理解することははるかに簡単です。



WebGL | Windows | Linux | Mac | GitHubソース

他の皆のためのスクリーンショット
habrastorage.org/storage2/800/f9b/549/800f9b54918bfb0c563abafeed43f741.png

habrastorage.org/storage2/43a/0d2/39c/43a0d239c61201b09edc739f7a0f9e92.png

habrastorage.org/storage2/f97/fae/c76/f97faec763796d67e0bfd94df9e18644.png

habrastorage.org/storage2/0db/c9f/6b4/0dbc9f6b4da28516ef1ee1e3382f5bcb.png



マウスでシーンを回転させるには、Esc-終了、残りのボタンは画面に表示されます。



Linuxユーザーの場合:

「chmod + x GimbalLock」でGimbalLockファイルを実行可能にし、実行します。



All Articles