こんにちは「クォータニオン」と「オイラー角」の方法の長所と短所
は何ですか
-どちらが速いですか?-計算の労力
が少なくて済むのはどれですか?
-どちらがより正確ですか(丸め誤差で)?
6 に答える
オイラー角は人間が理解しやすく、回転を個々の自由度に分解するのにも適していますが(キネマティックジョイントなどの場合)、あいまいさやジンバルロックなどの欠点があります。実際には、クォータニオンの方が計算が簡単で(人間ではなくコンピューターの場合)、効率が高いため、クォータニオンを使用することをお勧めします。オイラー角で回転する場合は、3回転してそれらを乗算する必要がありますが、クォータニオンは1回転のみであり、すでにsinとcosをエンコードしているため、クォータニオンから行列への変換は非常に効率的です。
クォータニオンはジンバルロックを回避します。詳細はこちら。
クリスチャン・ラウの答えからのポイントを少し拡張します:
オイラー角の仕様にはあいまいさがあります。どの角度がどの軸に適用されますか?規則(yaw、pitch、roll)を使用するコードは、(roll、pitch、yaw)を想定するコードと相互運用できず、使用されている解釈をコードから見ると明らかでない場合があります。
クォータニオンは、明確に定義された軸を持つ単一の回転のみを表すため、このあいまいさの影響を受けません。
他の回答で指摘されているように、クォータニオンにはオイラー角に比べて多くの利点があります。ただし、オイラー角には、クォータニオンに比べて1つの利点があります。
オイラー角は、回転の方向と大きさを教えてくれます。オイラー角をクォータニオンに変換すると、その情報は失われます。たとえば、(-270°、0、0)と(1170°、0、0)のオイラー回転は、同一のクォータニオン(-0.7071、0、0、-0.7071)を生成します。
オイラー角はより高速です。
オイラー角は、より少ない計算労力で済みます。
クォータニオンは絶対的により正確です。
オイラー角で見つかったジンバルロックと呼ばれる問題があります。これは、2つの軸が整列しているときに発生します。一方、クォータニオンはより柔軟性があり、軸指向であるため、この問題を解決しました。しかし、理解するのは複雑です。
さて、クォータニオンを理解しやすくするために。4つのコンポーネントを2つに分割しましょう。軸の原点に接続されている角度とx、y、z点はPと言います。新しい軸を表す(x、y、z)-P線。角度は、軸と実際の方向との間の角度を表します。この答えを視覚化するには、この5分間のビデオを確認する必要があります。 https://eater.net/quaternions/video/intro
オイラー角はクォータニオンよりも優れています。オイラー角は常にメモリに保存し、計算にはクォータニオンのみを使用する必要があります。誰もこれを知りませんが、私が言うことは絶対に真実です。あなたが潜んでいるなら、これが重要であることを知ってください。聞いてください。
その理由は、オイラー角からいつでも簡単にクォータニオンを導出できるためです。変換は簡単です。ただし、クォータニオンからオイラー角への変換は基本的に壊れています。すべてのクォータニオンには2つの可能なオイラー角があり、クォータニオンが2つの可能性のどちらから来たのかを知ることはできません。
仮想世界と3Dゲームの場合、いつでもクォータニオンを使用できます。これは、コンピュータが実際に物理的なジンバルをヨーイングしたりピッチングしたりすることなく、その方向でオブジェクトの絵を描くことができるためです。ただし、ロボットやその他の実際のアプリケーションでは、クォータニオンに変換するときに実際の情報が失われます。
実際の物理的なジンバルがあり、そのジンバルの方向を表すクォータニオンが与えられている場合、その方向を達成するために使用されたジンバルを元のヨー、ロール、ピッチで抽出することは絶対にできません。ただし、ジンバルの可動範囲がどこかに制限されている場合を除きます。 。
これを覚えて。ロボット工学または何らかの機械的設定を使用している場合は、方向の値を元のオイラー角として保存します。計算のためだけに一時的にクォータニオンに変換するだけです。
クォータニオンに変換すると、基本的にオイラーに戻ることはありません。したがって、その旅行を永続的にするのではなく、すべての情報をオイラー角として保存してください。