回転の問題は、ほとんどの人が理解しやすいので、オイラー角の観点でそれを考えることです。
しかし、ほとんどの人は、オイラー角が3つの連続した角であるという点を忘れています。最初の軸の周りの回転は、次の回転を最初の元の回転に対して相対的にすることを意味します。したがって、オイラー角を使用して3軸のそれぞれを中心にベクトルを独立して回転することはできません。
これは、2つの行列を乗算すると直接行列に変換されます。この乗算は、1つの行列を他の行列の空間に変換すると考えることができます。
これは、クォータニオンを使用している場合でも、3つの連続した回転で発生することを意味します。
四元数はジンブルロックの解決策ではないという事実を強調したいと思います。四元数を使用してオイラー角を表現した場合、実際にはジンブルロックが常に発生します。問題は、問題がある、表現ではない3つの連続ステップ。
ソリューション?
ベクトルを3軸の周りに独立して回転させるための解決策は、単一の軸と単一の角度に結合することです。この方法で、逐次乗算を行う必要があるステップを取り除くことができます。これは効果的に次のように変換されます。
私の回転行列は、X、Y、Zの周りの回転の結果を表します。
オイラーの解釈ではなく
私の回転行列は、X、Y、Zの周りの回転を表します。
これを明確にするために、ウィキペディアのオイラーの回転定理から引用します。
オイラーの回転定理によれば、固定点を中心とする剛体または座標系の回転または一連の回転は、固定点を通る固定軸(オイラー軸と呼ばれる)を中心とした特定の角度θの単一回転に相当します。オイラー軸は通常、単位ベクトルu→で表されます。したがって、3次元の回転は、ベクトルu→とスカラーθの組み合わせとして表すことができます。クォータニオンは、この軸角度表現を4つの数字でエンコードし、対応する回転をR3の原点を基準とした点を表す位置ベクトルに適用する簡単な方法を提供します。
3つの行列を乗算すると、常に 3つの連続した回転表さ。
ここで、3軸周りの回転を結合するには、X、Y、Z周りの回転を表す単一の軸と単一の角度を取得する必要があります。言い換えれば、軸/角度または四元数表現を使用して、連続回転を取り除く必要があります。
これは通常、通常はクォータニオンまたは軸角度として表される初期方向(軸角度と見なすことができます)で開始し、目的の方向を表すようにその方向を変更することによって行われます。たとえば、アイデンティティクォータテリオンから始めて、差だけ回転して目的の方向に到達します。このようにして、自由度を失うことはありません。