Chandler@Berlin -2ページ目

Chandler@Berlin

ベルリン在住

なぜ逆行列の転置なのか

先の章で normal が従う変換がわかった.しかしこれは逆行列の転置ではないではないかと言うかもしれない.normal は基本的に row ベクトルであるから,これは正しい.しかし,OpenGL などのライブラリでは normal をメモリに格納する場合には,normal と通常のベクトルを区別しない.ベクトルと点をも区別しないこともしばしばである.通常のベクトルは column ベクトルであるから,これと区別しないようなベクトルにするにはその転置をとれば良い.すると,式 5 の転置は,
Chandler@Berlin-eq18
である.これでなぜ逆行列の転置なのかわかった.

結局同じことではあるが,もう少し簡潔な方法も示しておこう.これは normalの式から始める.
Chandler@Berlin-eq19
ここでは v が Aを受ける場合,それに対応する normal n^T は,
Chandler@Berlin-eq20
の変換を受けることを示している.後は転置をすればcolumn vector が得られる.


座標 Σ の原点を O, 座標 Σ' の原点をO' とすると,O'O の Σ' における座標は,
$Chandler@Berlin-odo
で表現されるとする.一つコメントをしておくと,OpenGL などではtransformation行列を用いて物体を移動させたり物体をゆがめたりする操作を行うことができるので,物体が動いたように思うかもしれない.そのような解釈も間違いではないと思うが,しかし,ここでは物体そのものの座標よりも,座標間の変換というものとしてとらえることにしたい.なぜなら,このような視点では,物体がなくても変換ということを考えることができるからである.操作に着目した方法は,操作そのもの,ここでは行列を考えることに集中できると思う.図 3には点 P が存在しているが,この点は動いていない.しかし,その座標は座標系によって異なる.これは街の地図を書く時に,どこを原点にして考えるかというのは任意であることと同じである.例えば,ベルリンのZoo 駅を原点にした地図を作ることもできるし,ベルリンのAlexanderplatz 駅を原点にした地図を作ることもできる.ベルリンのZoo 駅を原点にした地図と,Alexanderplatz を原点にした地図では,Zoo 駅の座標表現は異なったものになる.しかし,座標が違うのは,Zoo 駅が実際に動いたからではない.座標というのは,人が決めた任意性がある.だからどの座標を使うというのは状況に寄る.座標系間の変換さえ決めれば,好きな座標を導入することができる.これが座標系の変換を考える動機である.

座標系間の変換は,次の式が成り立つ.
Chandler@Berlin-p_sigma'
A が正則であるとすると,逆行列が存在し,
Chandler@Berlin-p_sigma
ところで,
Chandler@Berlin-eq12
である.これは図\ref{fig:transform} を見てもらった方が早いだろう.原点は変換で平行移動しているだけなので,その逆変換は逆方向への平行移動である.したがって,
Chandler@Berlin-eq13
と書くこともできる.

一方,normal n は点 P を含む平面に定義されるとすると,座標系Σにおいては次のように書くことができる.
Chandler@Berlin-eq14
この normal が座標系Σ'に変換されたとすると,
Chandler@Berlin-eq15
と示されるだろう.

式 1を式 2に代入する,
Chandler@Berlin-eq16
式 3と式 4を比較すると,
Chandler@Berlin-eq17
式 5 が normal の変換を示している.このような変換を受けるベクトルを covariant ベクトルと言い,通常のベクトルは contravariantベクトルと言う.co (togather) variant (changing) vector はこのように座標変換と共に変化する.しかし一般のベクトルはその表記は変化するが,ベクトルとしては変化しない.それは点 P がその座標は座標系によって変化するが,実際には動いていないことと同じである.そのようなベクトルを contra (against) variant (change) vector と言う.

画像のオリジナルのサイズを使うと指定したのですが,縮小されてしまいました.アメプロはどうも数学の話を書くのは向いていないなあ...
covariant vector としての normal vector

第三の説明はやはり数学的には第一のものと第二のものとあまり変わらない.しかし,この第三の説明は normal をどう変換してよいのかにつながるという部分があるので説明しよう.この説明は私の好きな杉原先生の本[5]による.

この説明はちょっと形式的になってしまうので,わかりにくかもしれない.他の説明と基本的には同じであるが,形式的になった分,実際に変換を求めることができるので,実際にどうやって normal ベクトルの変換が行なわれるかを求めたい人向けの導入である.厳密な形式に興味がない人はこの章を飛ばしてしまってもかまわない.

では,まずはアフィン変換を導入しよう.

線形変換のうち,アフィン変換と呼ばれるよく使われる変換がある.アフィン変換は直線を直線に移し,直線上の比を保つ線形変換の一種である.したがって,一点に degenerate する場合を含めて,三角形は三角形へと変換される.三次元ユークリッド空間のアフィン変換の表現が,3×3 の行列を使って示されるとする.ここで,アフィン変換は実は2つの座標系間の変換である.なので私は,物体を変形するというイメージを二次的なものとして考えている.結果として物体を変形することはできるのだが,座標系間の変換であるので,任意に変形することができるわけではない.一般には拡大,回転,移動,剪断の組合せであり,三角形を円へと変換することができるわけではない.

アフィン変換を座標変換と考えれば,ある点 P の 座標が Σ と Σ' という二つの座標系でどう変換されるかということが対象となる.ここで P そのものは動いていないことに注意する.この様子を図[3]に示す.P のある座標系での表現が変化するのである.この座標は直交しているとは限らないし,ある座標軸方向とその他の座標軸方向では,同じユークリッド距離が違う表現になるかもしれない.たとえば,X 方向が二倍に拡大されているように見える座標系というのもありえる.
$Chandler@Berlin-transform

Figure 3. A matrix A transforms the coordinate system Σ to Σ'. Note: the point P doesn't move, but its coordinates representation may differ depends on the coordinate system.


ちょっと面倒だが,この P の座標が座標系 Σ と Σ' 間でどう表現されるか書いておく.

点 P は座標系 Σ では,
Chandler@Berlin-eq07
と表現され,
Chandler@Berlin-eq08
と表現されるとする.表現というのは,実際の座標,例えば,(1,1,0)^T のような値が決まるという意味である.一方,点 P とだけ書いてある場合,座標を導入するまでその座標は何か知らなくて良い.またこの点が二次元の空間にあるのか,三次元の空間にあるのかも知る必要はない.点 P とその座標表現P_{Σ}の違いは,線形作用素 T とその表現行列 M のような関係である.あるいは,プログラミングのアナロジで言えば interface とimplementation と言えるかもしれない.(こうやって考えていくと Futamura projections[1]の話とかにふくらんでいくがこの記事の範囲を越えるだろう.)

長くなってしまったので今回はここまでにして,次回はいよいよここで定義した座標系を使って normal がどのように transform されるか示そう.