通常、回転行列からオイラー角は一意に求められない。そこで制約をつけて一意な値を求める。
X軸、Y軸、Z軸周りの回転行列はそれぞれ以下のようになる。
XYZの順番で回転させると
回転行列の各要素を次のように定義する。
XYZの回転行列からそれぞれの軸の回転角を求めると
上記の式でY軸の回転角度を求めた場合、アークサインを使っているので範囲が-π/2からπ/2になってしまう。つまり90度以上のY軸回転が求められない。
実際に(30, 120, 60) と (-150, 60, -120)は同じ回転を表すが行列からオイラー角を求めたとき、上記の式では後者の回転角度しか求められない。
一意に回転角度を決定するために制約をつける。XYZ軸の回転のうちどれかが固定の場合、次のように行列から他の角度を求める。
xが分かっている場合のオイラー角
cos(x)が0になる場合は
yが90度のとき
zが分かっている場合のオイラー角
とここまで書いてみてプログラムを作って試したら、XZから180度を引いて180度からYを引いたらYの範囲が-π/2からπ/2以外のものも求められるんじゃね?ということに気づいた。無駄な計算した。
(30, 120, 60) → (30 – 180, 180 – 120, 60 – 180) = (-150, 60, -120)
https://sapphire-al2o3.github.io/js-demo/math/forked_-オイラー角→行列→オイラー角/
回転行列からオイラー角を求めるときに参考にさせていただきました.
ひとつ気づいたのですが...XYZの回転角を求めるときに
y=asin(-m02)とありますが,正しくはy=asin(-m20)だと思います.
間違っていたらスミマセン...
By: s.akizuki on 2013年11月12日
at 12:21 午前
ホントですね。あとで修正しておきます。ご指摘ありがとうございます。
By: tel on 2013年11月12日
at 1:03 午前
[…] https://spphire9.wordpress.com/2012/07/05/%E5%9B%9E%E8%BB%A2%E8%A1%8C%E5%88%97%E3%81%8B%E3%82%89%E3%8… […]
By: 回転行列からオイラー角を求める – キャタピラ on 2014年11月5日
at 4:49 午後