投稿者 tel | 2012年7月5日

回転行列からオイラー角を一意に求める

通常、回転行列からオイラー角は一意に求められない。そこで制約をつけて一意な値を求める。

X軸、Y軸、Z軸周りの回転行列はそれぞれ以下のようになる。

XYZの順番で回転させると

回転行列の各要素を次のように定義する。

XYZの回転行列からそれぞれの軸の回転角を求めると

eular

上記の式で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_-オイラー角→行列→オイラー角/


フィードバック

  1. 回転行列からオイラー角を求めるときに参考にさせていただきました.
    ひとつ気づいたのですが...XYZの回転角を求めるときに
    y=asin(-m02)とありますが,正しくはy=asin(-m20)だと思います.
    間違っていたらスミマセン...

  2. ホントですね。あとで修正しておきます。ご指摘ありがとうございます。

  3. […] 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… […]


コメントを残す

カテゴリー