回転した座標軸と一致させるための回転軸と角度の算出
こんにちは。お知恵をお借りしたく質問致します。
プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。
ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。)
図のように、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軸)を回転軸としてφ度回転する」という関数もあるので、オイラー角を求める方法でも構いません。
その他、説明不足な点がありましたら随時追記致しますので、ご指摘願います。
どうかよろしくお願いいたします。
お礼
ありがとうございます。 クォータニオンを使用して、上手くいきました。 回答ありがとうございました。