web-dev-qa-db-ja.com

2つの座標系間の回転行列を見つける方法は?

2つの座標系があります。 Originの3D座標と、最初の座標系に対する2番目の座標系の軸の3Dベクトルを知っています。次に、最初の座標系を2番目の座標系に変換する回転行列をどのようにして見つけることができますか?

enter image description here

19
Udaya

説明されている問題は、次のように解決できます。させて

M = m_11 m_12 m_13
    m_21 m_22 m_23
    m_31 m_32 m_33

目的の回転行列を示します。が必要です

 1 0 0 * M + t = x_x x_y x_z
 0 1 0           y_x y_y y_z
 0 0 1           z_x z_y z_y

ここで、tは翻訳を示します。この行列の等価性は、左から、それ自体の逆行列である恒等行列を乗算することで解決できることがわかります。したがって、次の等式が得られます。

 M + t = x_x x_y x_z
         y_x y_y y_z
         z_x z_y z_y

これは、両側からtを減算して、次のように目的の行列Mを取得することで再配置できます。

 M = x_x x_y x_z - t = x_x-t_x x_y-t_y x_z-t_z 
     y_x y_y y_z       y_x-t_x y_y-t_y y_z-t_z
     z_x z_y z_y       z_x-t_x z_y-t_y z_z-t_z

初期行列は標準ベースの基本ベクトルで構成されているため、これは比較的簡単でした。一般に、それはより難しく、 基底変換 を伴います。これは、基本的に ガウス消去法 で実行できますが、数値的には難しい場合があります。

8
Codor

ソースコードを使用して、その方法を示す記事を執筆しました。簡単な答えは、異なる軸の内積で3x3マトリックスを構築することです

http://www.meshola.com/Articles/converting-between-coordinate-systems

1
John Mott

基礎の変更はあなたを助けることができると思う Wikiリンク 。実装は非常に簡単です。

1
JavaNullPointer

Aを2つの座標系間の関係を定義する4x4行列とします。

次に、2つの間の角度は:

θ= arcos(trace(A)/2.0)

0
user10519046