重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

前回の質問で同次変換とはどのようなものかおおよそ理解する事が出来ました。
追加質問したのですが、解決できないので新たに再質問させて頂きます。

前回の質問内容:http://oshiete.goo.ne.jp/qa/6934077.html


変換という言葉は理解できました。

同次変換とは、1次元多い行列で表現された変換をさす。
一次元多い理由は、並進を表すため。

数学的に定義される変換は、ユークリッド変換、アフィン変換、射影変換の
3つである。

ユークリッド変換についてよく理解できないので教えてください。
これは線形変換とは異なりますよね。線形変換であれば、並進は含みませんから。
アフィン変換は、線形変換に並進を加えたものだと認識しております。
アフィン変換とユークリッド変換の違いはなんでしょうか?
ユークリッド変換の方がアフィン変換より集合的に大きいことはわかるのですが・・・

また同次変換を、
X
Y
Z
1
と表している記述を良く見ます。
具体例を挙げると、
基準座標系を(x y z 1)、対象座標系(X Y Z 1)
と表す。

対象座標系は基準座標系をx軸にθ回転、x軸に3平行移動した
ものとする。

X x|1   0    0    3 |
Y= y|0  cosθ  sinθ  0 | 
Z  z|0  -sinθ  cosθ 0 |
1 1|0   0     0   1 |

のように表されると思います。

ここで、同次変換を
X
Y
Z
W
と表すとすると、変換行列の4列目は、どのようにあらわされるのでしょうか?
X x|1   0    0    ? |
Y= y|0  cosθ  sinθ  ? | 
Z  z|0  -sinθ  cosθ ? |
W ?|0   0     0   ?  |

以上、申し訳ありませんがご回答よろしくお願い致します。

A 回答 (4件)

#2,#3です。



>ですから、正しく表現するには、
>(4×4)×(4×1)=(4×1)ですね。・・・(A)
>もしくは、
>(1×4)×(4×4)=(1×4)ですね。・・・(B)

>(A)の表現を採用します。
>基準座標系を(x y z 1):列ベクトル、対象座標系(X Y Z 1):列ベクトルとする。
>基準座標系をx軸にθ回転、x軸に3平行移動した同次変換は、
>(X) ( 1   0    0   0)(x)
>(Y)=(0 cosθ -sinθ  0)(y)
>(Z) ( 0 sinθ  cosθ  0)(z)
>(1) ( 3   0    0   1)(1)
>と表されると思います。
>
>ここまでで間違いはありますでしょうか?
間違っています。
(A)の表現を採用するといいながら、変換行列は(A),(B)の両方の表現が交じり合ってへんてこな行列になっています。(A)と(B)では行列の掛け算の順序が逆になります。

A#2の参考URLを参考にして下さい。
そしてお書きの変換行列方程式
X=
Y=
Z=
1=
を、行列を使わないで、4つの方程式として書き出して見て下さい。
本来の変換の式になっていることに気が付くと思います。
(A)と(B)の行列表現では、回転と平行移動の合成変換行列を計算する時の
行列の計算順序が逆になることは理解して見えるでしょうか?
おかしな合成行列をお書きなので同じ4x4行列でも行列の掛け算の順序を
逆にして見えないかと危惧してます。

この回答への補足

ご回答ありがとうございます。
私は、全然理解出来ていないようですね・・・
ご指摘ありがとうございます。

まず、行列の演算について、
(4×4)×(4×1)=(4×1)ですね。・・・(A)
もしくは、
(1×4)×(4×4)=(1×4)ですね。・・・(B)
の計算自体は正しいですよね?

変換行列の書き方が間違っているという認識なのですが、どうでしょうか?
変換行列に関して、それぞれの成分を行方向と列方向どちらの方向に並べて良いのか理解できていません。NO.3の補足質問では、x成分の変換行列を1行目に、y成分を2行目に、z成分を3行目に、並進を4行目に左から順に並べました。
変換行列の書き方には、規則があるのでしょうか?この点が理解できていないと、
X=
Y=
Z=
1=
の方程式を正しくかけないです。
因みに、NO.2の参考URL3次元座標系と3次元幾何変換でも変換行列は行成分でabcdと並べられていました。

>(A)と(B)の行列表現では、回転と平行移動の合成>変換行列を計算する時の行列の計算順序が逆に
>なることは理解して見えるでしょうか?
理解できていないです。。。
計算順序が逆になるとはどういうことですか?

本当に何度も申し訳無いのですが、ご回答よろしくお願い致します。

補足日時:2011/09/07 12:49
    • good
    • 0

#2です。



A#2の補足について

>行列の式に関しては、
>[m×n型][n×p型]=[m×p型] となるという基本は理解しています。

>列ベクトルと行ベクトルの転置は同じになるので、書きやすい列ベクトル
>で書かせて頂きましたが、正確には行ベクトルでなければ行列の積と
>しては成り立ちませんね。すいません。

本当に分かって見えるのでしょうか?
A#2にあげた参考URLをちゃんと熟読して見ましたか?
そうなら、以下のような式は書けないはずですが?
また、読めば、変換行列も分かるはずだと思いますがね?

>書き直します。

>X          |1   0    0    3 |
>Y=|x y z 1| |0  cosθ  sinθ  0 | 
>Z           |0  -sinθ  cosθ 0 |
>1          |0   0     0   1  |

「=」の左側は列ベクトル、右側は行ベクトルで、等号で結ばれるはずないだろう?
行列式は「|」を使い、ベクトルと行列は「 [ ] 」または「 ( ) 」を使って囲って
区別して下さい。
A#2の参考URLの中の変換行列の式の書き方に習って書いて下さい。ちゃんとURLを
見たなら上記のような書き方はしないと思いますが、全く読んでいないなら、参考URL
を書いても無駄、回答しても無駄ですね?

[X,Y,Z,1]=[x,y,z,1]*A
と書いた場合の変換行列Aと

[X] [x]
[Y]=A*[y]
[Z] [z]
[1] [1]
と書いた場合の変換行列Aと
を書いてみて下さい。
質問者さんの書いてる変換行列は上の両者の行列Aを取り違えて見えるようです。
ちゃんとA#2の参考URLのやり方で、やれば両者の行列Aが容易に出てきます。
ちゃんと計算してみて、その結果を補足にお書き下さい。

アフィン変換行列は
「拡大行列*回転行列*平行移動行列」で表せる変換行列ですが、

質問者さんがお書きの同次変換行列は
どのような機能をアフィン変換行列に追加したものですか?
また、変換後の行列要素(ベクトル成分)を返還前の行列要素(ベクトル成分)を使って書き下した方程式として表してみて補足にお書きください。

そうすれば、後半の変換行列表現が明らかになると思います。
A#2の参考URLを熟読して、x軸の周りの回転行列とx軸方向への平行移動行列を求め、その行列の積を求めてみて下さい。補足質問でお書きの変換行列の正しい行列が出てきますよ。

追加参考URL(アフィン変換)

参考URL:http://www.c3.club.kyutech.ac.jp/gamewiki/index. …

この回答への補足

ご回答ありがとうございます。
今まで頂いた参考URLをしっかりと読ませて頂きました。

まず、間違えている点は(行列積を×であらわしています)、
(1×4)×(4×4)=(1×4)の行列式になるという点ですね。
私の書いている行列では、変換後が(4×1)の行列式になって
います。列ベクトルや行ベクトルの転置行列は等しくなるから
どちらで表現しても良いと勝手に解釈しておりました。
これが間違い・混乱の原因です。

ですから、正しく表現するには、
(4×4)×(4×1)=(4×1)ですね。・・・(A)
もしくは、
(1×4)×(4×4)=(1×4)ですね。・・・(B)

(A)の表現を採用します。
基準座標系を(x y z 1):列ベクトル、対象座標系(X Y Z 1):列ベクトルとする。基準座標系をx軸にθ回転、x軸に3平行移動した同次変換は、
(X) ( 1   0    0   0)(x)
(Y)=(0 cosθ -sinθ  0)(y)
(Z) ( 0 sinθ  cosθ  0)(z)
(1) ( 3   0    0   1)(1)
と表されると思います。

ここまでで間違いはありますでしょうか?

以上、ご回答よろしくお願い致します。

補足日時:2011/09/06 13:03
    • good
    • 0

>変換行列の表し方についてはどうでしょうか?


行列の基礎的な知識がない人の全く駄目な、式として成り立たない、ありえない式です。
変換行列以前の行列を習い始めの頃の基礎を無視した行列の計算式です。

列ベクトル(4行1列の行列とみなせる)に後ろから4行4列の行列を掛けるかけることが出来ると思いますか?

質問は難しいことを聞かれていますが、行列の基本は全く出来ていないとしかいえないね。

(1)「行ベクトルに後ろから変換行列を掛ける」
または
(2)「変換行列に後ろから列ベクトルを掛ける」
のどちらかです。

行列演算の基礎的な知識の欠如ゆえ、ごちゃ混ぜの有り得ない式になっている。

(1)と(2)の変換行列は転置の関係にあるので(1)、(2)のどちらの
変換行列を使うかで、変換行列が異なってきます。

座標系の座標ベクトル(あるいは座標点)を列ベクトルで扱うのか、行ベクトルで扱うのか、決めて、
それに応じた変換行列にしないといけないね。
質問者さんのは、そこらがごちゃ混ぜになっている。その辺りの、質問の変換行列の式を正しい表現にして、質問してくれないと、回答者はあきれて、回答も出来ないよ。
式表現を書き直して改めて質問して下さい。

参考URLは
前の方が、座標系の座標を列ベクトルとして扱っています。
後ろの方は、座標系の座標を行ベクトルとして扱っています。
参考になると思うので、行列の演算の基礎の復習とあわせて呼んでみて下さい。

その上で質問があれば補足で質問して下さい。

参考URL
http://k-lab.flash.tuis.ac.jp/lect/cg_theory/CGr …
http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%A5%A2 …

参考URL:http://k-lab.flash.tuis.ac.jp/lect/cg_theory/CGr …

この回答への補足

ご回答ありがとうございます。
式の書き方が悪く申し訳ございませんでした。

行列の式に関しては、
[m×n型][n×p型]=[m×p型] となるという基本は理解しています。
列ベクトルと行ベクトルの転置は同じになるので、書きやすい列ベクトル
で書かせて頂きましたが、正確には行ベクトルでなければ行列の積と
しては成り立ちませんね。すいません。

書き直します。

X          |1   0    0    3 |
Y=|x y z 1| |0  cosθ  sinθ  0 | 
Z           |0  -sinθ  cosθ 0 |
1          |0   0     0   1  |

で表された同次変換において、対象座標系の4列目がWで表される場合、
どのように表現すれば良いのでしょうか?
X          |1   0    0    ? |
Y=|x y z ?| |0  cosθ  sinθ  ? | 
Z           |0  -sinθ  cosθ ? |
W          |0   0     0   ?  |

以上、ご回答よろしくお願い致します。

補足日時:2011/09/04 04:10
    • good
    • 0

ユークリッド変換とは物体の大きさや形を変えない変換です。


回転+平行移動 なのでアフィン変換より狭い変換です。

この回答への補足

ご回答ありがとうございます。
変換行列の表し方についてはどうでしょうか?

補足日時:2011/09/03 17:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!