忍者ブログ
日々のあれこれとか、同人とか、プログラミングとか、3DCGとか。不定期に書きつづってます。
[284]  [283]  [282]  [281]  [280]  [279]  [278]  [277]  [276]  [275]  [274
今日はタイトルの通り、「変換行列からオイラー角を求める方法」でハマってしまい、
えらい時間が掛かったので、自分メモのつもりで投稿。

変換行列からオイラー角による回転を計算する場合、回転順序によって6種類の
計算方法があります。
(ちなみに、回転順序はXYZ、XZY、YXZ、YZX、ZXY、ZYXの6種類です。)

ちなみに、ベースとなる情報元は以下のwiki。
http://www7.atwiki.jp/lucifer/pages/13.html

ここの解説の仕方をベースに、誤っていると思われる部分を修正した表にしておきます。


まず、変換行列は以下の形になっているという前提。

    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

上の表の計算方法を使えば、各回転順序でオイラー角を取得出来るハズ。

ただ、浮動小数で計算していると、三角関数や除算なんかで不正値がでたり
するのでそっちも注意が必要。
例えば、if (cos(β)==0) みたいなコードにしちゃうと、cos(β)の結果が非常に小さい
値だけどゼロで無い時に、cos(β)での除算結果が不正値になったり。

ふう。自分メモ終了。
自分以外にも誰かの役に立ったりしたら幸いです。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題
どうも有難うございました!ネット上で色々調べたけど実装の結果全部あってない、これでやっと解決しました!本当にありがとう!
cstdlib 2015/10/25(Sun)20:49:24 編集
Re:無題
cstdlibさん、コメントありがとうございます。ブログ主です。
ネットの片隅のこんな記事ですが、お役に立てたようでなによりです。
【2015/10/26 22:06】
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tri-Niv過去作品DL販売
プロフィール
HN:
文月大 (ふみづき・だい)
性別:
男性
自己紹介:
同人イベンターな社会人。
3Dモデル制作、ゲーム制作などで細々とサークル活動中……

pixiv、3DCGArtsにときたま投稿しています。(pixivのページ3DCGArtsのページ)
twitterでもたまにつぶやきます。(@fumiduki)
個人サークル「七月の三日月
参加サークル「Tri-Niv
最新コメント
[2016/09/11 shougo_k2100]
[2015/10/25 cstdlib]
[2014/06/11 shougo_k2100]
[2011/09/10 文月大]
[2011/09/07 リコ]
最新トラックバック
リンク
<サークル>
Tri-Niv

多目的スペース
ブログ内検索
広告
忍者ブログ [PR]