変換行列に関して質問させて頂きます。
当方、行列に関する理解が乏しいので基礎を勉強し直しました。
前回、同次変換に関して質問させて頂きました。
URL:http://oshiete.goo.ne.jp/qa/6983574.html
新たに基礎的な部分を質問させて頂きます。
変換行列は回転行列を考えます。
右手系を採用してベクトルをx軸中心にθ回転した回転行列は、
(1 0 0 )
(0 cosθ sinθ )
(0 -sinθ cosθ )
と表します。3行×3列の行列です。
よって、
変換後の列ベクトル(3×1)を
(X)
(Y)
(Z)
変換前の列ベクトル(3×1)を
(x)
(y)
(z)
とすると、(3×1)=(3×3)×(3×1)なので
(X) (1 0 0 ) (x)
(Y)= (0 cosθ sinθ ) (y)
(Z) (0 -sinθ cosθ ) (z)
と表されると思います。
ここまでで間違いがありますでしょうか?
ご指摘よろしくお願い致します。
合わせて並進を考える場合について教えて下さい。
例えば、x軸に3移動した場合を4行×4列の変換行列
で示す場合、どのように書けば良いのでしょうか?
添付画像の(A)と(B)どちらでしょうか?
合わせて理由も教えて頂けるとありがたいです。
回転行列を作った手順と同じくすると(A)の
表現で良いと考えているのですがどうでしょうか?
以上、ご回答何卒よろしくお願い致します。
No.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!!
No.4
- 回答日時:
#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]
となるのですね。
一次変換の式も理解できました。
これに対して、私が作った行列の計算結果は間違いであることも
理解できました。
ちゃんと展開して計算すれば、列ベクトルの場合は列成分にしなければ
ならない事がわかりました。
>意味を考えないで、形だけに囚われた発想をするから、間違うのです。
おっしゃる通りですね。ご指摘ありがとうございました。
No.2
- 回答日時:
>右手系を採用してベクトルを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様のご回答では変換行列は行成分ではなく列成分(縦)に
それぞれの方向成分を書いていると思います。
本当に申し訳ないのですが、ご指摘よろしくお願い致します。
No.1
- 回答日時:
>右手系を採用してベクトルを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は省略)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- 数学 y軸周りの回転行列は ふたつとも間違いですか? 色々探しても cos 0 sin 0 1 0 -si 6 2023/04/24 00:01
- 数学 3次元実ベクトル空間において, 平面 P:x-y+z+1=0 と直線 L:2(x-1)=-y=-z 3 2022/10/29 14:39
- 数学 線形代数学の問題です! Vは 4 次元ベクトル空間とし線形変換 f ∶ V→ V のある基底 v1, 1 2022/06/12 09:25
- 大学・短大 【線形代数について質問です】 点P(2.-1)を点Q(2.1)に写す原点を中心とする回転を表す1次変 1 2023/06/11 14:28
- Excel(エクセル) Excel セルに入っている日付を参照して、別シートのリストを表示させたい 1 2022/04/12 17:02
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- Excel(エクセル) excelにおける転記マクロの書き方 2 2023/05/12 03:16
- 数学 座標変換について 1 2022/08/04 16:42
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つに直交する単位ベクトル
-
「ノルム、絶対値、長さ」の違...
-
n次元ベクトルの外積の定義
-
微積分の記号δ、d、Δ、∂の違い
-
ナブラ ラプラシアン
-
det(A)≠0 の必要十分条件を教え...
-
行列とベクトルの表記の仕方に...
-
平面の交線の方程式
-
「任意」ってどういう意味?
-
ベクトルについて
-
両方に垂直な単位ベクトルを求...
-
線積分、面積分とは何?
-
ベクトルAとBに垂直なベクト...
-
2次元における外積について
-
2点A(-2,1,-1), B (1,3,2)を通...
-
高校数学の範囲外の知識は大学...
-
3次元の平面上の点かどうかを...
-
3次元空間の点と直線の距離の公...
-
縦ベクトルと横ベクトルの違い...
-
グラスマン数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報