반사 변환(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축에 대한 반사를 적용하고, 역순 변환을 통해 원래 위치로 돌리는 과정을 따른다.

더 자세히 설명하면:

  1. 평행이동 행렬 \mathbf{T}:
\mathbf{T} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & -c \\ 0 & 0 & 1 \end{bmatrix}
  1. 회전 행렬 \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을 만족하는 각도이다.

  1. x축에 대한 반사행렬 \mathbf{M_x}는 이미 위에서 다루었던 것과 같다:
\mathbf{M}_x = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix}
  1. 역회전 행렬 \mathbf{R}^{-1}:
\mathbf{R}^{-1} = \begin{bmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}
  1. 역 평행이동 행렬 \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에 대한 반사 변환은 더욱 복잡하다. 이 경우 다음와 같은 절차를 따른다:

  1. 평면을 원점으로 평행이동
  2. 평면을 xy 평면과 평행하게 회전
  3. xy 평면에 대한 반사 수행
  4. 원래 위치로 역순 변환

이러한 절차를 통해 반사 변환을 구현할 수 있다.