- ベストアンサー
行列 変換行列 行列の積
- 行列の変換行列とは、回転行列を指すものであり、右手系を採用した場合、ベクトルをx軸中心に回転させる行列である。
- 変換行列による変換は、3行×3列の行列を用いて、変換前のベクトルとの行列の積として表される。
- 並進を考える場合、4行×4列の変換行列を使用する。x軸に3移動する場合、(A)の表現で良いと考えられる。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2,#4です。 A#4の補足について 理解できたようですね。 >つまり、列ベクトルを使う場合は変換行列も列成分に 示し、行ベクトルを使う場合は変換行列は行成分に 示さなければならないのですね。 その通りです。 行列とベクトルとの積の順序も逆になりますね。 >列ベクトルでの同次変換行列は、 >[1,0,0,3] >[0,cos(s),-sin(s),0] >[0,sin(s),cos(s),0] >[0,0,0,1] ----------------------------- >(1×4)=(1×4)(4×4): >行ベクトルでの同次変換行列は、 >[1,0,0,0] >[0,cos(s),sin(s),0] >[0,-sin(s),cos(s),0] >[3,0,0,1] >となるのですね。 その通りです。 >一次変換の式も理解できました。 >これに対して、私が作った行列の計算結果は間違いであることも >理解できました。 >ちゃんと展開して計算すれば、列ベクトルの場合は列成分にしなければ >ならない事がわかりました。 理解されたようでおめでとう。Cogratulations!!
その他の回答 (4)
- info22_
- ベストアンサー率67% (2650/3922)
#2です。 A#2の補足質問について >ベクトルをx軸中心にθ回転した回転行列のつくり方が間違っているのでしょうか? そう、間違っています。 質問者さんの回転行列を使って、ベクトルを実際に回転して見てください。 x軸のまわりにθだけ時計回り(θの負の方向)に回転し回転が逆になります。 [x] [s] [y}=[s] [z} [s] (s=0~1) 、θ=π/3(=60°)として計算してみて下さい。 質問さんの回転行列で計算した [X] [s] [Y]=[(1+√3)s/2] [Z} [(1-√3)s/2] をプロットするとベクトルが逆回転(時計回りに回転)したことが確認できます。 ではどこが間違ったのかというと >x軸周りなので(1 0 0)…(●):x軸単位方向ベクトルはそのまま。 >(0 1 0):y軸単位方向ベクトルをx軸まわりにθ回転すると、 >(0 1 0)→(0 cosθ sinθ)…(☆) >(0 0 1):z軸単位方向ベクトルをx軸まわりにθ回転すると、 >(0 0 1)→(0 -sinθ cosθ)…(★) >これより回転行列をつくるわけですが、 ~ここから~ >列ベクトルに掛けるので、 >変換行列はそれぞれ作った >単位方向ベクトルを行成分に書いて ~ここまで~ が間違っています。 //////////////////////////////////////////////// (●)のベクトルの成分は全てx成分に掛けるベクトル、 (☆)のベクトルの成分はy成分に掛けるベクトル、 (★)のベクトルの成分はz成分に掛けるベクトル、 なのでそれぞれ、順に回転行列の第一列、第二列、第三列に入れて回転行列を 構成してやらないと駄目です。 ///////////////////////////////////////////////// >(X) (1 0 0 ) (x) >(Y)= (0 cosθ sinθ ) (y) >(Z) (0 -sinθ cosθ ) (z) >としました。 ↑間違いです。θ=π/3など入れてx=y=z=1としてみて下さい。逆回転(時計方向に回転)します。 ~↓これが間違い。列成分としないと駄目です。~ >なぜ、行成分としたかは行列の積が横×縦のような計算方法だからです。 「行列の積が横×縦のような計算方法だから」が間違い。 意味を考えないで、形だけに囚われた発想をするから、間違うのです。 上の////////と////////で囲まれた範囲に書いたように考えてください。 質問者さんの考えと違うなら、ちゃんと簡単な実例で確認するなり、 なぜ↓のようにすべきかを回転行列や行列を書き下した一次変換の式 X=x Y=ycosθ-zsinθ Z=ysinθ+zcosθ で確認すれば、間違いに気付くと思いますがね。 「info22様のご回答では変換行列は行成分ではなく列成分(縦)に それぞれの方向成分を書いていると思います。」 だから、間違うのです。簡単なベクトル(x,y,z)とθで行列要素の積の意味を 考えながら計算し、回転後のベクトルを三次元プロットしてみれば間違いに 気付くはずです。、 (●),(☆),(★)のベクトル(成分)を回転行列の<<行成分でなく列成分>>として取り込まないと駄目でしょう。
お礼
ご回答ありがとうございました。
補足
ご回答ありがとうございます。 理解できました。 おっしゃる通り私の行列では逆回転になりました。 すいません。ちゃんと行列を展開して計算すれば、 列成分にしなければならないことがわかりました。 つまり、列ベクトルを使う場合は変換行列も列成分に 示し、行ベクトルを使う場合は変換行列は行成分に 示さなければならないのですね。 列ベクトルでの同次変換行列は、 [1,0,0,3] [0,cos(s),-sin(s),0] [0,sin(s),cos(s),0] [0,0,0,1] (1×4)=(1×4)(4×4): 行ベクトルでの同次変換行列は、 [1,0,0,0] [0,cos(s),sin(s),0] [0,-sin(s),cos(s),0] [3,0,0,1] となるのですね。 一次変換の式も理解できました。 これに対して、私が作った行列の計算結果は間違いであることも 理解できました。 ちゃんと展開して計算すれば、列ベクトルの場合は列成分にしなければ ならない事がわかりました。 >意味を考えないで、形だけに囚われた発想をするから、間違うのです。 おっしゃる通りですね。ご指摘ありがとうございました。
- FT56F001
- ベストアンサー率59% (355/599)
#1です。失礼しました。座標系をθ回すのではなく,ベクトルをθ回すケースですね。#2さんが正しいです。
- info22_
- ベストアンサー率67% (2650/3922)
>右手系を採用してベクトルをx軸中心にθ回転した回転行列は、 >(1 0 0 ) >(0 cosθ sinθ ) >(0 -sinθ cosθ ) >と表します。 ↑ これはベクトルを行ベクトルとして扱う場合のx軸の周りにθだけ回転した時の 回転行列です。列ベクトルを使われるようなので間違いです。 列ベクトルを用いる場合の回転行列は (1 0 0 ) (0 cosθ -sinθ ) (0 sinθ cosθ ) です。 >(X) (1 0 0 ) (x) >(Y)= (0 cosθ sinθ ) (y) >(Z) (0 -sinθ cosθ ) (z) >と表されると思います。 ↑ 間違いです。 正しくは以下の通りです。 (X) (1 0 0 ) (x) (Y)= (0 cosθ -sinθ ) (y) (Z) (0 sinθ cosθ ) (z) 行列を普通の式に書き直すと X=x Y=ycosθ-zsinθ Z=ysinθ+zcosθ となります。 >x軸に3移動した場合を4行×4列の変換行列 >で示す場合、どのように書けば良いのでしょうか? >添付画像の(A)と(B)どちらでしょうか? (A)は間違い。 (B)はx軸のまわりの回転行列が前半で書いたように間違っていますのその箇所を 訂正すれば正しい表現になります。 以下、丸括弧( )は [ ]を使い、行列要素はカンマ「,」で区切って書くこと にします。 x軸のまわりθだけ反時計周りに回転する回転行列をM1, x軸の正方向に3だけ並進する移動行列をM2とおくと M1= [1,0,0,0] [0,cos(s),-sin(s),0] [0,sin(s),cos(s),0] [0,0,0,1] M2= [1,0,0,3] [0,1,0,0] [0,0,1,0] [0,0,0,1] とまります。 x軸のまわりにθだけ回転した後、x軸正方向に3だけ並進する変換行列Mは M=M2*M1= [1,0,0,3] [0,cos(s),-sin(s),0] [0,sin(s),cos(s),0] [0,0,0,1] となります。 変換後のベクトルは [X] [Y]= [Z] [1] [x] M[y] [z] [1] となります。 行列表現を書き下すと X=x+3, Y=ycosθ-zsinθ, Z=ysinθ+zcosθ となります。
補足
ご回答ありがとうございます。 ベクトルをx軸中心にθ回転した回転行列のつくり方が間違っているのでしょうか? x軸周りなので(1 0 0):x軸単位方向ベクトルはそのまま。 (0 1 0):y軸単位方向ベクトルをx軸まわりにθ回転すると、 (0 1 0)→(0 cosθ sinθ) (0 0 1):z軸単位方向ベクトルをx軸まわりにθ回転すると、 (0 0 1)→(0 -sinθ cosθ) これより回転行列をつくるわけですが、列ベクトルに掛けるので、 変換行列はそれぞれ作った単位方向ベクトルを行成分に書いて (X) (1 0 0 ) (x) (Y)= (0 cosθ sinθ ) (y) (Z) (0 -sinθ cosθ ) (z) としました。 なぜ、行成分としたかは行列の積が横×縦のような計算方法だからです。 info22様のご回答では変換行列は行成分ではなく列成分(縦)に それぞれの方向成分を書いていると思います。 本当に申し訳ないのですが、ご指摘よろしくお願い致します。
- FT56F001
- ベストアンサー率59% (355/599)
>右手系を採用してベクトルをx軸中心にθ回転した回転行列は、 >(X) (1 0 0 ) (x) >(Y)= (0 cosθ sinθ ) (y) >(Z) (0 -sinθ cosθ ) (z) 質問者さんの答えで正しいです。 >例えば、x軸に3移動した場合を4行×4列の変換行列 >添付画像の(A)と(B)どちらでしょうか? (A)は誤り,(B)が正しいです。 右辺の行列の積を成分で書くと, (A)では X=x 1=3x+1 (B)では X=x+3 1=1 となるからです。(Y,Zは省略)
お礼
はい。理解できました。 ご回答本当にありがとうございました。