반사 변환(reflection transformation)은 특정한 축을 기준으로 점들의 위치를 좌우 혹은 상하로 뒤집는 변환을 의미한다. 동차좌표계를 이용하면 다양한 반사 변환을 효율적으로 나타낼 수 있다. 이러한 변환은 2차원과 3차원 공간 모두에서 가능하다. 본 장에서는 이를 동차좌표계를 통해 설명한다.
2차원 공간에서의 반사 변환
x축에 대한 반사
점 (x, y)를 x축에 대해서 반사시키려면 다음 행렬을 사용한다:
\mathbf{M}_x = \begin{bmatrix}
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 1
\end{bmatrix}
이 때, 점 (x, y)의 동차 좌표는 \mathbf{P} = \begin{bmatrix} x & y & 1 \end{bmatrix}^T 이므로, 변환된 점 \mathbf{P'}는 다음과 같이 계산된다:
\mathbf{P'} = \mathbf{M}_x \mathbf{P} = \begin{bmatrix}
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y \\
1
\end{bmatrix}
= \begin{bmatrix}
x \\
-y \\
1
\end{bmatrix}
y축에 대한 반사
점 (x, y)를 y축에 대해서 반사시키려면 다음 행렬을 사용한다:
\mathbf{M_y} = \begin{bmatrix}
-1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{bmatrix}
변환된 점 \mathbf{P'}는 다음과 같이 계산된다:
\mathbf{P'} = \mathbf{M}_y \mathbf{P} = \begin{bmatrix}
-1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y \\
1
\end{bmatrix}
= \begin{bmatrix}
-x \\
y \\
1
\end{bmatrix}
원점에 대한 반사
점 (x, y)를 원점에 대해서 반사시키려면 다음 행렬을 사용한다:
\mathbf{M_o} = \begin{bmatrix}
-1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 1
\end{bmatrix}
변환된 점 \mathbf{P'}는 다음과 같이 계산된다:
\mathbf{P'} = \mathbf{M}_o \mathbf{P} = \begin{bmatrix}
-1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y \\
1
\end{bmatrix}
= \begin{bmatrix}
-x \\
-y \\
1
\end{bmatrix}
y = x선에 대한 반사
점 (x, y)를 직선 y = x에 대해서 반사시키려면 다음 행렬을 사용한다:
\mathbf{M_{yx}} = \begin{bmatrix}
0 & 1 & 0 \\
1 & 0 & 0 \\
0 & 0 & 1
\end{bmatrix}
변환된 점 \mathbf{P'}는 다음과 같이 계산된다:
\mathbf{P'} = \mathbf{M}_{yx} \mathbf{P} = \begin{bmatrix}
0 & 1 & 0 \\
1 & 0 & 0 \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y \\
1
\end{bmatrix}
= \begin{bmatrix}
y \\
x \\
1
\end{bmatrix}
임의의 직선 y = mx + c에 대한 반사
점 (x, y)를 임의의 직선 y = mx + c에 대해서 반사시키기 위해, 우선 직선을 원점으로 평행이동 한 후, 회전 행렬을 통해 직선을 x축과 평행하게 만든다. 그 후 x축에 대한 반사를 적용하고, 역순 변환을 통해 원래 위치로 돌리는 과정을 따른다.
더 자세히 설명하면:
- 평행이동 행렬 \mathbf{T}:
\mathbf{T} = \begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & -c \\
0 & 0 & 1
\end{bmatrix}
- 회전 행렬 \mathbf{R}:
\mathbf{R} = \begin{bmatrix}
\cos\theta & -\sin\theta & 0 \\
\sin\theta & \cos\theta & 0 \\
0 & 0 & 1
\end{bmatrix}
여기서 \theta는 \tan\theta = m을 만족하는 각도이다.
- x축에 대한 반사행렬 \mathbf{M_x}는 이미 위에서 다루었던 것과 같다:
\mathbf{M}_x = \begin{bmatrix}
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 1
\end{bmatrix}
- 역회전 행렬 \mathbf{R}^{-1}:
\mathbf{R}^{-1} = \begin{bmatrix}
\cos\theta & \sin\theta & 0 \\
-\sin\theta & \cos\theta & 0 \\
0 & 0 & 1
\end{bmatrix}
- 역 평행이동 행렬 \mathbf{T}^{-1}:
\mathbf{T}^{-1} = \begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & c \\
0 & 0 & 1
\end{bmatrix}
결합 변환 행렬 \mathbf{M_{line}}은 다음과 같다:
\mathbf{M}_\text{line} = \mathbf{T}^{-1} \mathbf{R}^{-1} \mathbf{M_x} \mathbf{R} \mathbf{T}
이제 점 (x, y)를 이 변환 행렬을 통해 반사시킬 수 있다.
3차원 공간에서의 반사 변환
3차원 공간에서는 xy평면, yz평면, xz평면 등을 기준으로 반사를 수행할 수 있다.
xy 평면에 대한 반사
점 (x, y, z)를 xy 평면에 대해서 반사시키려면 다음 행렬을 사용한다:
\mathbf{M}_{xy} = \begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & -1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
yz 평면에 대한 반사
점 (x, y, z)를 yz 평면에 대해서 반사시키려면 다음 행렬을 사용한다:
\mathbf{M}_{yz} = \begin{bmatrix}
-1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
xz 평면에 대한 반사
점 (x, y, z)를 xz 평면에 대해서 반사시키려면 다음 행렬을 사용한다:
\mathbf{M}_{xz} = \begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & -1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
임의의 평면에 대한 반사
임의의 평면 ax + by + cz = d에 대한 반사 변환은 더욱 복잡하다. 이 경우 다음와 같은 절차를 따른다:
- 평면을 원점으로 평행이동
- 평면을 xy 평면과 평행하게 회전
- xy 평면에 대한 반사 수행
- 원래 위치로 역순 변환
이러한 절차를 통해 반사 변환을 구현할 수 있다.