以前、mixi 日記に書いていたものの、mixi日記検索できないぜジーザス!!ってことでこちらに転載します。
XYZ順に行列を掛けるときの回転マトリックスの作り方と、そこからXYZそれぞれの回転値の求め方です。
これ、何故か数年に一度必要になるんですよね、、、、
なんか,毎度毎度この展開をやっては資料を無くしてる(そして再び一から計算しなおし…)んで,いいかげんウンザリなんですよね(笑
しかも、他のページに載っている式が間違っているものが結構あって、検索しても信用できなくて結局自分で計算するという。。。。ソレハサテオキ。
回転行列を求める
まず, XYZ それぞれの軸の回転.
| 1 0 0 |
Rx = | 0 Cx -Sx|
| 0 Sx Cx |
| Cy 0 Sy |
Ry = | 0 1 0 |
| -Sy 0 Cy |
| Cz -Sz 0 |
Rz = | Sz Cz 0 |
| 0 0 1 |
Cx,Cy,Cz,Sx,Sy,Sz は cos(θx),cos(θy),…sin(θz) の略です.
表示が崩れて汚いのはご愛嬌(笑
因みに,これも忘れた場合は一から考えるんですけどイマドキはググった方が早いですね.そのときは座標系の違いに気をつけないといけないですけど.
XYZ回転のマトリックスを求める
XYZ 回転の場合,回転マトリックス R は RzRyRx.
これを一生懸命展開します.
| CyCz SxSyCz-CxSz CxSyCz+SxSz |
R = | CySz SxSySz+CxCz CxSySz-SxCz |
| -Sy SxCy CxCy |
※2013/04/08 計算結果に間違いがあったので訂正しました。ご指摘いただいた Jagoon さんありがとうございます。
ε=(。・д・。)ふー
根気があれば完全に手の運動です.でも,大抵どこかで間違えるんですよね…(´・ω・`)
回転行列から回転角度を求める
因みに,最初に R がわかっていれば回転角度も求めることができます。
ただし、このときに必ずしもマトリックスを作った元の回転角度がわかるというわけではありません。
こちらのサイトは行列の表記が転置されているので気をつける必要がありますが回転順序が違う場合も含めて詳細な計算方法が掲載されています(合っているかは検算していないので誰かやってくださいw)
※注記:NumPyで行列を扱うと、上記サイトのように列優先なので、NumPyを使うときは転置された表記のほうがわかりやすいかもしれません
続・回転行列から回転角度を求める
より詳細を記述した資料をみつけました(注意:PDF)。ちゃんとやろうとすると結構めんどくさいみたいです。笑
こんにちは。このサイトを参考にさせて頂きましたが、
一カ所間違いっぽい所が有りましたので報告します。
XYZ回転のマトリックス:
CxCz → CxCy
本当ですね!!ご指摘ありがとうございます!!
訂正ついでに検算した結果も載せておきます。
|Cz -Sz 0| | Cy 0 Sy| |1 0 0|
|Sz Cz 0| | 0 1 0| | 0 Cx -Sx|
| 0 0 1| |-Sy 0 Cy| |0 Sx Cx|
|CyCz -Sz SyCz| |1 0 0|
|CySz Cz SySz| |0 Cx -Sx|
| -Sy 0 Cy| |0 Sx Cx|
で、これを計算すると最終的な形になります。