オイラー角と回転行列
こんにちは、株式会社CFlatです。
とあるお客さんからオイラー角の質問を受けたので少し調べてみました。
その際に計算結果は色んなサイトに載っていましたが、計算過程が見つからなかったのでメモしておきます。
オイラー角とは
オイラー角とは3次元空間にあるオブジェクトの姿勢を表現する手法で、回転軸も回転毎に変化します。
具体的にx-y-z系のオイラー角の回転方法を説明します。
以下、絶対座標系を大文字のXYZ、オブジェクトの座標系を小文字のxyzで表現します。
( x, y, z )をx軸周りに角度αだけ回転して( x', y', z' )とする。
( x', y', z' )をy'軸周りに角度βだけ回転して( x'', y'', z'' )とする。
( x'', y'', z'' )をz''軸周りに角度γだけ回転して( x''', y''', z''' )とする。
このように( x, y, z )を( x''', y''', z''' )に回転させたとき、α、β、γをx-y-z系のオイラー角と言います。
オイラー角と回転行列の関係
次にオイラー角と回転行列の関係を計算します。
P軸周りに角度θだけ回転させる行列をとし
初期状態でXYZとxyzが一致しているとすると
x-y-z系のオイラー角を表す回転行列Rは
であると色んなサイトに書かれています。つまり次の式が成り立っています。
オブジェクト座標系でx, y', z''の順番に回転していたはずが、
絶対座標系でZ, Y, Xの順番での回転に一致するという一見不思議な状態になります。
ここから不思議な状態の解説をしていきますが、
その前に基本をおさらいしておきます。
絶対座標X, Y, Z軸周りの回転はそれぞれ下記のように書けます。
, ,
では任意のP軸周りの回転の場合はというと、絶対座標軸よりもちょっと面倒な作業をしなければなりません。
1つの手法として、まずP軸をX軸に合わせるような回転行列を掛けて、P軸とX軸を一致させます。
次に絶対座標X軸周りの回転を行い、最後に逆行列を掛けてPを元の位置に戻します。
式で書くと次のようになります。
任意軸周りの回転が表現できたところで最初のx-y-z系のオイラー角を表す回転行列Rを変形していきます。初期状態は
初期状態で絶対座標のXとオブジェクト座標のxは一致しているので、
y'軸周りの回転をするためにy'をYに合わせてから元に戻します。
Z''軸周りの回転をするためにz''をZに合わせてから元に戻します。
めでたくオブジェクト軸周りx, y', z''順の回転が
絶対座標軸周りZ, Y, X順の回転に変形できました。
確認
実際にオブジェクトを回転させて確かめてみます。
以下では左側が絶対座標系(細い座標軸)でZ(青), Y(緑), X(赤)の順に回転し、
右側がオブジェクト座標系(太い座標軸)でx(赤), y'(緑), z''(青)の順に回転した様子です。
オブジェクト軸周りx, y', z''順の回転が
絶対座標軸周りZ, Y, X順に等しいことが分かります。