線形代数 において、線形変換 は行列 で表すことができる。
T
{\displaystyle T}
単位正方形に様々な2次元アフィン変換行列を適用した場合の効果。鏡映行列は拡大縮小行列の特殊なケースであることに注意。
2次元平面上のアフィン変換は3次元でも実行できる。平行移動はxy平面に平行にせん断することで行われ、回転はz軸を中心に行われる。
アフィン変換 を行列で表すには同次座標(英語版 ) を使用することができる。これは、2次元ベクトル (x , y ) を3次元ベクトル (x , y , 1)として表すことを意味し、より高次元の場合も同様である。これにより変換を行列の乗算で表すことができる。関数形式は
x
′
=
x
+
t
x
;
y
′
=
y
+
t
y
{\displaystyle x'=x+t_{x};y'=y+t_{y}}
単位正方形に2次元アフィン変換行列と透視変換行列を適用した場合の効果の比較。
3次元コンピュータグラフィックス において重要なもう1つの変換は透視投影 である。平行投影は点を平行線に沿って画像平面に投影するために使用されるが、透視投影は投影中心と呼ばれる単一の点から発せられる線に沿って画像平面に点を投影する。このことは物体が投影中心から遠いほど投影範囲が小さくなり、近いほど投影範囲が大きくなる。
最も単純な透視投影では、原点を投影の中心として
z
=
1
{\displaystyle z=1}
の平面を像平面とする。すると、この変換の関数形式は
x
′
=
x
/
z
{\displaystyle x'=x/z}
;
y
′
=
y
/
z
{\displaystyle y'=y/z}
となる。これを同次座標で表すと次のようになる。
[
x
c
y
c
z
c
w
c
]
=
[
1
0
0
0
0
1
0
0
0
0
1
0
0
0
1
0
]
[
x
y
z
1
]
=
[
x
y
z
z
]
{\displaystyle {\begin{bmatrix}x_{c}\\y_{c}\\z_{c}\\w_{c}\end{bmatrix}}={\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&1&0\end{bmatrix}}{\begin{bmatrix}x\\y\\z\\1\end{bmatrix}}={\begin{bmatrix}x\\y\\z\\z\end{bmatrix}}}
行列の乗算を行うと、同次成分
w
c
{\displaystyle w_{c}}
は
z
{\displaystyle z}
の値と等しくなり、他の3つは変化しない。したがって、実平面に写像し直すには各成分を
w
c
{\displaystyle w_{c}}
により割る同次除算 (homogeneous divide)または透視除算 (perspective divide)を実行する必要がある。
[
x
′
y
′
z
′
1
]
=
1
w
c
[
x
c
y
c
z
c
w
c
]
=
[
x
/
z
y
/
z
1
1
]
{\displaystyle {\begin{bmatrix}x'\\y'\\z'\\1\end{bmatrix}}={\frac {1}{w_{c}}}{\begin{bmatrix}x_{c}\\y_{c}\\z_{c}\\w_{c}\end{bmatrix}}={\begin{bmatrix}x/z\\y/z\\1\\1\end{bmatrix}}}
これを回転、拡大縮小、平行移動およびせん断と組み合わせて像平面と投影の中心を任意の場所に移動することで、より複雑な透視投影を作成できる。
出典
外部リンク