• ベストアンサー

CGのワールド座標系とローカル座標系の変換の違いについて

「3Dグラフィックスのための数学」という本でを勉強している者です。 テキストで、ワールド座標系の変換として p'=pRxRyRz (p及びp'は3次元ベクトル、Rx,Ry,Rzは3×3行列) で得られるp'は ローカル座標系の変換で p'=pRzRyRx で得られるp'と等しいというのです。 どうしてそうなるのかがわかりません・・・ 誰か詳しい方助言お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#101199
noname#101199
回答No.3

ご丁寧にありがとうございます。 私はロボット工学の方で座標変換をメインにやったので、混乱させてしまったかもしれません。すいません。 (ロボット工学では、「変換」を、座標の変換、座標系の変換、座標系自体 のように色々な視点でみるので。) たぶん、テキストは、相対変換と絶対変換について書かれているのでしょう。 ポイントとしては、 "ワールド座標系は絶対に動かない" "ローカル座標は動く" (モデルに張り付いている座標系なので、モデルが動いたらそれに応じて動く) という点です。 そして、 Rx(x軸に対する回転) Ry(y軸に対する回転) Rz(z軸に対する回転) を意味していると思ってください。 p'=pRxRyRz に対して、2通りの"見方"ができます。 (1) "(動かない)ワールド座標に対して"、モデルを Rx回転させて、(回転軸は、ワールド座標系のx軸 その後Ry回転させて、(回転軸は、ワールド座標系のy軸) その後Rz回転させる。(回転軸はワールド座標系のz軸) (モデルが動くと同時に、ローカル座標系も回転します。) これらの回転は全部、ワールド座標系の軸周りに回転しています。 (2) まずモデルを、 "ローカル座標のz軸に対して"Rz回転させる。(そしたらモデルが回転するので、ローカル座標系が変わります。) 次に、"動いたローカル座標系に対して"Ry回転させる。(そしたら当然、ローカル座標系はまたかわります。) 次に、"さらに動いたローカル座標系に対して"Rx回転させる。 これらの回転は、全部、回転軸が動いています。(ローカル座標系の軸周りに回転させています) 前者を絶対変換といい、後者を相対変換といいます。 これらの変換が同じことは、一見不思議に見えますが、例えば90度回転させてみるなどして、自分で色々と試行錯誤してみればイメージがつかめるようになります。(私は、(1),(2)のようにモノを実際に回転させて色々試して納得させました) 数式的な理解としては、ロボット工学のテキストで申し訳ないのですが、参考URLの16~17ページに書いてあります。(格別わかりやすいわけではないので、読めなかったらすいません) また、似たような話が書いてある3Dグラフィックのページがあったので、とりあえず参考URLに張っておきます。 理解できますでしょうか・・・。 直感的に理解したいのなら、とりあえず自分で実験をしてみるのが一番良いと思います。 それと、少し疑問箇所が。 質問内容は2次元平面のグラフィックスの話なんでしょうか? 平行移動は線形変換で表せないので、3×3行列で平行移動を表しているというのはおかしい気がするのですが・・・。 Rがアフィン変換だとすると、2次元平面のグラフィックスでの話しになってしまうと思うのです。。

参考URL:
http://www.ac.ctrl.titech.ac.jp/~yamakita/robot1.pdf,http://www21.atwiki.jp/mizcremorne/pages/318.html
19740828
質問者

お礼

返事が遅れてすみませんm(__)m 参考文献は、非常に参考になりました。 ロボット工学のほうの参考文献は、100パーセントまでは納得いきませんでしたが、wikiの方の参考文献は図が非常に分かりやすく直感的な理解ができました。 ただ、わたくし、潔癖症なのでしょうか、数学的な厳密な証明がしたかったのですが、これはわたしの欲ですね(^^) あと、平行移動の変換についてですが、テキストによれば、3次行ベクトルを拡張して、4次行ベクトルとし、変換行列も4×4行列にするみたいです。例をあげれば、 p'=(x,y,z,1)|1,0,0,0|        |0,1,0,0|        |0,0,1,0|        |a,b,c,1| となるp'は、 p'=(x+a,y+b,z+c,1) となります。 3次では変換できないそうです。 いろいろと付き合ってくださりありがとうございます。なんだか頭がすっきりしました!!

その他の回答 (2)

noname#101199
noname#101199
回答No.2

>まずpは、なにも変換をしていないので、ワールド座標系とローカル座標系がだぶるので、とりあえずワールド座標系ということで。 とのことですが、pがワールド座標系から見た座標だと、本に書いてある感じですか? pもp'もワールド座標系だとすると、ローカル座標系を取る意味がなくなると思うのですが・・・ Rx,Ry,Rzは回転行列だと思いますが、どっちの座標系からどっちの座標系を見た回転行列でしょうか? それと質問文に「ワールド座標系の変換」「ローカル座標系の変換」と書かれているのですが、これの意味はどういう意味なのでしょう? (変換なので、「ローカル座標系からワールド座標系に変換する」みたいな感じで表せると思います。「~から~への変換」と表して欲しいです) 私はその本を持っていないので、もう少し詳しくお願いします。

19740828
質問者

補足

まず、テキストには、モデル(複数の頂点からなるポリゴンの集合体) を製作するのに記述する座標系としてローカル座標系を用いるという事が書かれています。続いて、複数のモデルをそれぞれどこに配置するかという事を記述する座標系としてワールド座標系を用いるという事が書かれています。 これを踏まえたうえで、この本には例として、 (1)あるモデルをローカル座標系のz軸に関してαだけ回転する。 (2)続いてあるモデルをローカル座標系のy軸に関してbだけ平行移動する。 これとは別に、 (1)’あるモデルをワールド座標系のy軸に関してbだけ平行移動する。 (2)’続いてあるモデルをワールド座標系のz軸に関してαだけ回転する。 という事この二つ((1)(2)と(1)’(2)’)の変換は最終的には同じ事をしている。 と書いてあります。 pが、どちらの座標系からみた座標かは書かれていません... Rx,Ry,Rzは例としてあげただけで回転行列とは限りません。 先ほどの例をあげれば、回転行列をRα、平行移動をRbとすると (1)q=pRα (ローカル座標系からローカル座標系への変換?) (2)p'=qRb (ローカル座標系からローカル座標系への変換?) つまり、p'=pRαRb (ローカル座標系からローカル座標系への変換?) (1)’r=pRb (ワールド座標系からワールド座標系への変換?) (2)' p'=rRα (ワールド座標系からワールド座標系への変換?) つまり、p'=pRbRα  (ワールド座標系からワールド座標系への変換?) これを拡張して、p R_1 R_2 R_3 ... R_n (ワールド座標系からワールド座標系への変換?)と p R_n R_n-1 ... R_2 R_1 (ローカル座標系からローカル座標系への変換?) が、同じことをしているというのです!? 座標系が違うものどうしを比較するのは無理だと思うのですが、 どうもこれら様々な変換は皆ワールド座標系からワールド座標系への変換のような気もします。すみません...少し混乱しています。 テキストには簡単な図で説明していますが簡単すぎて分からないのです (;_ ;) とにかくテキストには~から~への変換とは明記しておらず、~座標系の~軸に対して~するとしか書いてないのです。 何とかご理解のほどを...

noname#101199
noname#101199
回答No.1

その辺りの話は、ロボット工学や画像処理の勉強の際に使っていました。 恐らくこう書きたかったんじゃないかな と思うものはあるのですが、念のため確認したいです。 p'、pはそれぞれどの座標系からみた座標ですか? それと、 p'=pRxRyRz と書かれていますが、pは行ベクトルなのですか? (フツーは列ベクトルで表現するので一応)

19740828
質問者

補足

乱暴な質問ですみません。 まずpは、なにも変換をしていないので、ワールド座標系とローカル座標系がだぶるので、とりあえずワールド座標系ということで。 p'はどちらもワールド座標系です。 pは、列ベクトルではなく、行ベクトルです。 よろしくお願いします。