# 동차좌표계를 이용한 반사 변환

반사 변환(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}
$$

2. 회전 행렬 $\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$을 만족하는 각도이다.

3. x축에 대한 반사행렬 $\mathbf{M\_x}$는 이미 위에서 다루었던 것과 같다:

$$
\mathbf{M}\_x = \begin{bmatrix} 1 & 0 & 0 \ 0 & -1 & 0 \ 0 & 0 & 1 \end{bmatrix}
$$

4. 역회전 행렬 $\mathbf{R}^{-1}$:

$$
\mathbf{R}^{-1} = \begin{bmatrix} \cos\theta & \sin\theta & 0 \ -\sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \end{bmatrix}
$$

5. 역 평행이동 행렬 $\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. 원래 위치로 역순 변환

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