三日月館【別館】開発・制作Tips集
[数学] 変換行列からオイラー角回転を取得する
最終更新:
fumiduki1985
-
view
変換行列からオイラー角回転を取得する場合、回転順序により以下のように取得できる。
(回転順序はXYZ、XZY、YXZ、YZX、ZXY、ZYXの6種類)
(回転順序はXYZ、XZY、YXZ、YZX、ZXY、ZYXの6種類)
ちなみに管理人自身の個人ブログの以下の記事から転載しています。
→ http://mikaduki2007.blog.shinobi.jp/Entry/279/
→ http://mikaduki2007.blog.shinobi.jp/Entry/279/
変換行列は以下の形になっているという前提。
m00 | m01 | m02 | ||
行列R | = | m10 | m11 | m12 |
m20 | m21 | m22 |
最初の回転軸をα、2番目の回転軸をβ、3番目の回転軸をγとすると、各回転順序での計算方法は以下のようになる。
α | β | γ | γの角度 | βの角度(-90~90) | αの角度 |
X | Y | Z | atan2(m01,m00) | asin(-m02) | asin(m12/cos(β)) if(m22<0) α=180-α |
X | Z | Y | atan2(-m02,m00) | asin(m01) | asin(-m21/cos(β)) if(m11<0) α=180-α |
Y | X | Z | atan2(-m10,m11) | asin(m12) | asin(-m02/cos(β)) if(m22<0) α=180-α |
Y | Z | X | atan2(m12,m11) | asin(-m10) | asin(m20/cos(β)) if(m00<0) α=180-α |
Z | X | Y | atan2(m20,m22) | asin(-m21) | asin(m01/cos(β)) if(m11<0) α=180-α |
Z | Y | X | atan2(-m21,m22) | asin(m20) | asin(-m10/cos(β)) if(m00<0) α=180-α |
ただし、cos(β)がゼロになる場合は、α=0、β=90又は-90として以下の通りにγを計算しなおす必要がある。
α | β | γ | γの角度 | βの角度(-90又は90) | αの角度 |
X | Y | Z | atan2(-m10,m11) | asin(-m02) | 0 |
X | Z | Y | atan2(m20,m22) | asin(m01) | 0 |
Y | X | Z | atan2(m01,m00) | asin(m12) | 0 |
Y | Z | X | atan2(-m21,m22) | asin(-m10) | 0 |
Z | X | Y | atan2(-m02,m00) | asin(-m21) | 0 |
Z | Y | X | atan2(m12,m11) | asin(m20) | 0 |
このページのタグ一覧
数学
数学