
こんにちは。お知恵をお借りしたく質問致します。
プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。
ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。)
図のように、xyz座標を回転してXYZ座標の向きに一致させたいと考えています。
また、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数があるので、それを活用しようと考えています。α,β,γはコサイン値(方向余弦)です。回転方向は、ベクトルの向きに時計回り…右ネジの法則みたいな感じです。
x軸から見たXの角度(θxX), y軸からのX(θyX), z軸からのX(θzX)
同様にx軸から見たY(θxY),θyY,θzY、θxZ,θyZ,θzZ
といったように、それらの角度(コサイン値)は分かっています。
(=xyz座標からみたXベクトルの方向余弦、Yベクトルの方向余弦、Zベクトルの方向余弦が分かっている。)
z軸とZ軸の外積を取ったベクトルを回転軸として、θzZが分かっているのでその角度で回転することでZ軸は一致しますけど、XY軸は合いません。(当然ですが…)
そのXY軸を合わせるためにまた回転するというのも遠回りで、任意の軸1本を中心に何度か回転するだけ(上記関数を1度使用するだけ)で、必ず向きが一致する解があると思うのですが、その任意軸と角度を算出する方法が分かりません。
一般にどういう計算をするのでしょうか。アドバイスいただければ幸いです。
なお、上記関数を用いない方法でも構いません。
「X軸(Y軸、Z軸)を回転軸としてφ度回転する」という関数もあるので、オイラー角を求める方法でも構いません。
その他、説明不足な点がありましたら随時追記致しますので、ご指摘願います。
どうかよろしくお願いいたします。

No.3ベストアンサー
- 回答日時:
というかそのままでいいのか。
バカだ。。。。回転前の基底ex, ey, ez,回転後の基底eX, eY, eZとして
eX = cos(θxX) ex + cos(θyX) ey + cos(θzX) ez
eY = cos(θxY) ex + cos(θyY) ey + cos(θzY) ez
eZ = cos(θxZ) ex + cos(θyZ) ey + cos(θzZ) ez
だから,この係数行列がそのまま座標回転行列。
座標回転行列は実直交行列なので,この転置行列が逆行列。
この回答への補足
ありがとうございます。
分かりました、回転行列さえ分かれば、そこからオイラー角を求めるのは簡単なのは理解しました。
http://www7.atwiki.jp/lucifer/pages/13.html
で、その回転行列は、単純に
(θxX, θyX, θzX)
(θxY, θyY, θzY)
(θxZ, θyZ, θzZ)
である…。
最初に知りたがってた任意軸回転の解についても、オイラー角が求まれば、そこから任意軸回転を求められそうです。
とりあえずこれで解決しそうですが、まだ自分の勘違いがあるかもなのでプログラム上でも完全に動作したことを確認してから締め切ります。(明日以降になりそうです)
オイラー角を使った方法により無事に解決できました。
この度はアドバイスしていただき、本当にありがとうございました。
大変参考になりました。
No.8
- 回答日時:
さらにもうひとつ。
回転軸の方向余弦が求まれば
ロドリゲスの公式から
cosθとsinθが
求まりますね。
#θ:回転角
この回答への補足
何度もありがとうございますm(_ _)m
そういえば、色々調べてたらその公式の記述も見かけました。
色々な方法があるようで面白いです。
それも試してみようと思います。
そろそろ回答締め切ります。
とりあえず、オイラー角を使った方法で無事に解決できました。
1回の軸回転(任意軸回転)による方法についてはまだ出来ていませんが、たくさんのアドバイスを頂戴しましたので、後は自分で調べるなりして分かりそうです。
3度回転するよりも1度で終わればやはり美しいので、この方法も十分に理解して実装できるよう頑張ってみます。
この度はアドバイスしていただき、本当にありがとうございました。
大変参考になりました。
No.7
- 回答日時:
ANO6 です。
もうちょっと考えてみました。回転軸は回転によって変化しないから
回転行列をM 回転軸を W とすれば
MW=W=EW (E:単位行列)
(M-E)W=0
なので、W は M-E のうち、一次独立な行ベクトルを2本選び
外積をとれば得られます。適当に2本選んで外積とって
零ベクトルになっちゃったら、別の2本を選ぶでよろしいかと。
角度は前に示した方法で求まりますが、もっと簡単な方法は無いかな?
お一人にしかポイントを付与できないのが残念ですが、ベストアンサーと同じくらい助かりました。
この度は貴重な時間を割いてまでいろいろと教えていただき、大変ありがとうございますm(_ _)m
No.6
- 回答日時:
ANO5です。
回転軸を回転しても長さは変わりませんから固有値=1の固有ベクトルということに
なりますね。
とすると固有方程式を解くまでもないので、固有ベクトルは簡単にもとまります。
回転軸に対する回転量は、回転軸に垂直なベクトルを用意すれば計算できます。
もっとスマートな方法があるかもしれませんが・・・
回転行列Rの固有ベクトルは(m32 - m23, m13 - m31, m21 - m12)で、良さそうな感じです。
角度については、行列のトレースが固有値の総和であることからtrace[R] = 1 + 2cosθ
よって、θ=ArcCos((trace[R] - 1) / 2)
で、求まるという記述がありました※。実際に実装して動作確認できました。
なぜそういう求め方で良いのか、自分にはまだよく分かりませんが…(^-^;)
もっと勉強してがんばって理解します。
※引用
http://www.rugbysensor.com/motion_cluc..html
No.4
- 回答日時:
いや,座標回転行列が直接得られるのでオイラー角なんていらないんじゃない?という意味なんですが。
サブルーチンなんか使わずに直接行列計算したらいいんじゃないの。まあ,詳細がわからないのでなんともいえませんが。この回答への補足
あ、そういうことですか。
回転行列が分かっても動かせないんです。説明不足でした。
OpenGLとかDirectXとかなら、自分で回転行列使って回せますけど、別の開発環境になっていまして、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数とか、限られたものしか、無いんですよ~(;_;)
あとさっきの補足に書いた回転行列は縦と横が逆だったかもということは気づいています(^-^;)
回答助かりますm(_ _)m
No.1
- 回答日時:
点P(x、y、z)を各座標軸を軸として、ある角度Φだけ回転したときのPの移る先の座標を計算するには、3行3列の行列R(Φ)を使います。
すなわち、x軸のまわりにΦだけ回転するときR(Φ)は1行目、2行目、3行目の順に書くと、A=(1 0 0)、(0 cosΦ -sinΦ)、(0 sinΦ cosΦ)
となります。
y軸中心に回転するときは、
B=(cosΦ 0 ーsinΦ)、(0 1 0)、(sinΦ 0 cosΦ)
z軸中心に回転するときは、
C=(cosΦ ーsinΦ 0)、(sinΦ cosΦ 0)、(0 0 1)
となり、点Pをx軸のまわりにΦ、さらにy軸のまわりにψだけ回転すると、
B(AP)=(B・A)P
を計算します。
この回答への補足
回答ありがとうございますm(_ _)m
回答していただいた内容は理解できました。
回転行列が分かると、オイラー角を算出するのは簡単そうだというのが分かってきました。
もう少し時間をください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
先着1,000名様に1,000円分もらえる!
教えて!gooから感謝をこめて電子書籍1,000円分プレゼント
-
回転行列から角度を求める
数学
-
3次元空間上の2つの座標から角度を求めたい
その他(プログラミング・Web制作)
-
3次元座標を原点中心に回転したい
数学
-
4
3次元ベクトルをある軸ベクトルで回転させたい
数学
-
5
空間での座標回転角度の求め方とは
数学
-
6
3次元の回転角度の求め方について教えてください。
数学
-
7
オイラー角 回転行列
数学
-
8
ベクトルをロールピッチヨーに変換する方法
数学
-
9
回転行列の求め方
数学
-
10
二点の座標から角度を求めるには?
数学
-
11
X軸方向の角度とY軸方向の角度の合成
数学
-
12
ほうこうよげん?
数学
-
13
エクセルで回転する座標の出し方
Excel(エクセル)
-
14
3行3列の行列の和と積の計算方法を教えて下さい。
数学
-
15
座標変換による回転角の求め方
数学
-
16
3次元以上の直交変換(回転)を、2つのベクトルから求める方法。
数学
-
17
ベクトルと平面のなす角度について
数学
-
18
3次元空間で3点を通る平面を2次元座標で表すには
数学
-
19
三次元の座標の回転をExcelで計算したい。回転行列?
Excel(エクセル)
-
20
座標を回転させる計算方法を教えて下さい。
数学
関連するQ&A
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
回転した座標軸と一致させるた...
-
5
一次関数の回転移動について
-
6
回転中の独楽の理想的中心(点...
-
7
JWCADの寸法表示を大きくしたい
-
8
EXCEL 一部のオブジェクトだ...
-
9
突然カーソルが手の形に…
-
10
クリッピングマスクの枠の外を...
-
11
フォルダ名の一覧をリスト化し...
-
12
Yahooの 画面サイズの変更
-
13
指定されたパスが存在しません...
-
14
word2010 SmartArtで連絡網作...
-
15
jw_cadで消えない線があります...
-
16
in Designで一部のページにのみ...
-
17
バツ印をつけるには??(ワード)
-
18
写真の色を薄くする方法
-
19
JW_CADの印刷で線幅が全て一緒...
-
20
Excel に貼り付けた図形が、勝...
おすすめ情報