locked
クォータニオンからオイラー角

    質問

  •  

    XNAでクォータニオンからオイラー角を取得したいのですが、どうしたらよいのかわかりません。

    オーダー順はX-Y-Zとなっております。

    あれこれ自作関数の試作を試みたものの数学的に深い知識が必要で正しい角度が得られない場面ができたりします。

     

    よい関数があるのかどうか?

    ない場合どのような式で変換されているのか?

     

    ご存知の方ご教授いただければ幸いです。

    よろしくお願い致します。

    2009年1月11日 10:44

すべての返信

  • クォータニオンから同じ回転を表現する行列を取得し、その行列からオイラー角を求めます。

     

    前半はズバリそのもののメソッドが Matrix 構造体にあります。

     

    後半は 「行列からオイラー角」 とでもキーワードにしてググれば、参考になりそうなページが色々でてきます。例えば今現在ならトップに表示される下記のページが分かりやすいです。

     

    http://d.hatena.ne.jp/It_lives_vainly/20070829/1188384519

     

    要するに簡単な(でも面倒な)連立方程式を解いているだけなので、数学的にそれほど深い知識も必要ないと思います。解き方も、(一意には決められない場合もあるという)大事なキーポイントも順を追って説明されています。

     

    ただし、このページで使っているオイラー角は ashalu さんのものとは違い Z-X-Y という順なので、その点だけ注意してください。

     

    もしこのページを見て分からない部分があれば、私は著者ではありませんができるだけ解説します。

    2009年1月11日 13:19
  • ありがとうございます。

    こんなに早く回答が得られると思っていなかったので感激です。

     

    早速実装してみますので何か詰まった場合はここにもう一度書かせて頂きますね。

    オーダー順だったX-Y-Zはこの際Z-X-Yでプログラムを作り直すことで解決することにしました。

     

    本当にありがとうございました。

    2009年1月12日 13:36
  • 無事実装ができましたのでもう一度返信させていただきます。

     

    回転角度が座標系により逆になることを注意する点以外はそのまま流用することができ、非常に参考になりました。

    理解してしまえばX-Y-Zオーダーについても楽に実装できそうなので今後作るかもしれません。

     

    ありがとうございました。

    2009年1月13日 5:04