座標変換とは、任意のベクトルを、その長さを変えないように移す変換のことです。
座標変換によって変換された 2 つのベクトルの内積は、
変換される前と同じ値になります。
座標変換は、2点間の距離を不変にする変換である
座標変換は、ワールド座標とローカル座標間の座標変換や、
ワールド座標を視点座標に変換する場合などに使われます。
点 (x, y) を (tx, ty) だけ平行移動すると
(x + tx, y + yt) になります。
ベクトルであらわすと、
OP = (x, y)
v = (tx, ty) として、
OP' = OP + v
これは、座標を -v だけ移動したのと同じです。
ある点を原点を中心としてΘだけ回転するということは、 座標を原点中心に-Θだけ回転するということです。
ある点を原点を中心としてX方向にaだけ拡大するということは、 座標のX方向を原点中心に1/aだけ拡大するということです。
2 次元の座標に 1 次元追加して、
3 次元の座標で表すようにすると、
平行移動を含めたすべての座標変換を行列で表すことができます。
2次元の点(x,y)は、斉次座標によって(x,y,1)と表すことができます。
1 0 0 0 1 0 tx ty 1
cosΘ sinΘ 0 -sinΘ cosΘ 0 0 0 1
sx 0 0 0 sy 0 0 0 1
点 (x, y, z) を (tx, ty, tz) だけ平行移動すると
(x + tx, y + yt, z + tz) になります。
ベクトルであらわすと、
OP = (x, y, z)
v = (tx, ty, tz)
として、
OP' = OP + v
これは、座標を -v だけ移動したのと同じです。
1 0 0 0 cosΘ sinΘ 0 -sinΘ cosΘ
cosΘ 0 -sinΘ 0 1 0 sinΘ 0 cosΘ
cosΘ sinΘ 0 -sinΘ cosΘ 0 0 0 1
sx 0 0 0 sy 0 0 0 sz
3次元空間中のある点(x,y,z)は、
斉次座標で(x,y,z,1)と表されます。
これによって、すべての座標変換が行列の積であらされるようになります。
1 0 0 0 0 1 0 0 0 0 1 0 tx ty tz 1
1 0 0 0 0 cosΘ sinΘ 0 0 -sinΘ cosΘ 0 0 0 0 1
cosΘ 0 -sinΘ 0 0 1 0 0 sinΘ 0 cosΘ 0 0 0 0 1
cosΘ sinΘ 0 0 -sinΘ cosΘ 0 0 0 0 1 0 0 0 0 1
sx 0 0 0 0 sy 0 0 0 0 sz 0 0 0 0 1