# 동차좌표를 이용한 복합 변환

#### 복합 변환 개요

동차 좌표계를 사용하는 가장 큰 장점 중 하나는 다양한 변환을 하나의 행렬로 통합할 수 있다는 점이다. 이를 통해 여러 변환을 연속해서 적용하는 과정을 단순화할 수 있다. 예를 들어, 2D 공간에서 객체를 회전시키고 평행 이동 시킨 후 다시 확대하고자 할 때, 각각의 변환을 개별적으로 적용하는 대신 하나의 복합 행렬을 이용하여 한 번에 계산할 수 있다.

#### 동차좌표의 정의와 개념

동차 좌표계에서 2D 점 $(x, y)$는 3D 벡터 $(x, y, 1)$로 나타난다. 동차 좌표계의 이러한 확장은 다양한 기하학적 변환을 행렬 연산을 통해 쉽게 표현하고 계산할 수 있게 한다.

#### 변환 행렬의 정의

1. **이동 변환 (Translation)** 이동 변환은 점을 특정 벡터만큼 이동시키는 변환이다. 2D 평면에서 점 $(x, y)$를 $(t\_x, t\_y)$만큼 이동시키는 변환 행렬은 다음과 같다:

$$
\mathbf{T} =
\begin{bmatrix}
1 & 0 & t\_x \\
0 & 1 & t\_y \\
0 & 0 & 1
\end{bmatrix}
$$

이 변환 행렬을 통해 점 $(x, y, 1)$은 $(x + t\_x, y + t\_y, 1)$로 이동된다.

2. **회전 변환 (Rotation)** 회전 변환은 점을 원점 중심으로 $\theta$ 만큼 회전시키는 변환이다. 회전 변환 행렬은 다음과 같다:

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

이 변환 행렬을 통해 점 $(x, y, 1)$은 원점을 기준으로 $\theta$ 만큼 회전된 새로운 좌표로 변환된다.

3. **확대 변환 (Scaling)** 확대 변환은 점을 원점을 기준으로 일정 비율로 확대 또는 축소시키는 변환이다. 확대 변환 행렬은 다음과 같다:

$$
\mathbf{S}(s\_x, s\_y) =
\begin{bmatrix}
s\_x & 0 & 0 \\
0 & s\_y & 0 \\
0 & 0 & 1
\end{bmatrix}
$$

여기서 $sx$와 $sy$는 각각 x축과 y축에 대한 확대 또는 축소 비율이다. 이 변환 행렬을 통해 점 $(x, y, 1)$은 $(sx \cdot x, sy \cdot y, 1)$로 변환된다.

#### 복합 변환의 수행

여러 가지 변환을 연속적으로 수행하는 경우, 각 변환을 개별적으로 적용하는 대신 복합 행렬을 구하여 한 번에 변환할 수 있다. 복합 변환 행렬은 각 변환 행렬을 순서대로 곱하여 구할 수 있다.

예를 들어, 다음과 같은 변환을 수행한다고 가정하자:

1. 점을 $(t\_x, t\_y)$만큼 이동
2. $\theta$ 만큼 회전
3. $(s\_x, s\_y)$ 비율로 확대

이 변환들을 복합 변환 행렬로 나타내면:

$$
\mathbf{T} \cdot \mathbf{R}(\theta) \cdot \mathbf{S}(s\_x, s\_y) =
\begin{bmatrix}
1 & 0 & t\_x \\
0 & 1 & t\_y \\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
\cos\theta & -\sin\theta & 0 \\
\sin\theta & \cos\theta & 0 \\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
s\_x & 0 & 0 \\
0 & s\_y & 0 \\
0 & 0 & 1
\end{bmatrix}
$$

이 복합 변환 행렬을 통해 점 $(x, y, 1)$는 순서대로 이동, 회전 및 확대 변환을 적용받고 최종 새로운 좌표로 변환될 것이다.

#### 단일 행렬로 복합 변환 적용

이제 위에서 언급한 각각의 변환 행렬을 실제로 곱해보자. 곱셈 과정은 각 행렬의 열과 행을 따라 요소를 곱하여 합산하는 방식이다.

먼저 확대 변환과 회전 변환 행렬을 곱한 결과는 다음과 같다:

$$
\mathbf{R}(\theta) \cdot \mathbf{S}(sx, sy) =
\begin{bmatrix}
\cos\theta & -\sin\theta & 0 \\
\sin\theta & \cos\theta & 0 \\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
sx & 0 & 0 \\
0 & sy & 0 \\
0 & 0 & 1
\end{bmatrix}
=============

\begin{bmatrix}
sx \cos\theta & -sy \sin\theta & 0 \\
sx \sin\theta & sy \cos\theta & 0 \\
0 & 0 & 1
\end{bmatrix}
$$

이제 이동 변환 행렬을 곱하여 최종 복합 변환 행렬을 계산하자:

$$
\mathbf{T} \cdot (\mathbf{R}(\theta) \cdot \mathbf{S}(sx, sy)) =
\begin{bmatrix}
1 & 0 & tx \\
0 & 1 & ty \\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
sx \cos\theta & -sy \sin\theta & 0 \\
sx \sin\theta & sy \cos\theta & 0 \\
0 & 0 & 1
\end{bmatrix}
=============

\begin{bmatrix}
sx \cos\theta & -sy \sin\theta & tx \\
sx \sin\theta & sy \cos\theta & ty \\
0 & 0 & 1
\end{bmatrix}
$$

따라서, 복합 변환 행렬은:

$$
\mathbf{T} \cdot \mathbf{R}(\theta) \cdot \mathbf{S}(sx, sy) =
\begin{bmatrix}
sx \cos\theta & -sy \sin\theta & tx \\
sx \sin\theta & sy \cos\theta & ty \\
0 & 0 & 1
\end{bmatrix}
$$

#### 복합 변환 적용 예시

이제 이 복합 변환 행렬을 실제로 점에 적용해 보자. 예를 들어, 점 $(x,y)$가 $(2, 3)$이라 하고, 이동 벡터가 $(1,1)$, 회전 각도가 $45^\circ$ (즉, $\theta = \pi/4$), 그리고 확대 비율이 $sx = 2$, $sy = 3$ 라고 하자.

$$
\mathbf{T} \cdot \mathbf{R}(\theta) \cdot \mathbf{S}(s\_x, s\_y) =
\begin{bmatrix}
2 \cdot \cos\frac{\pi}{4} & -3 \cdot \sin\frac{\pi}{4} & 1 \\
2 \cdot \sin\frac{\pi}{4} & 3 \cdot \cos\frac{\pi}{4} & 1 \\
0 & 0 & 1
\end{bmatrix}
=============

\begin{bmatrix}
2 \cdot \frac{\sqrt{2}}{2} & -3 \cdot \frac{\sqrt{2}}{2} & 1 \\
2 \cdot \frac{\sqrt{2}}{2} & 3 \cdot \frac{\sqrt{2}}{2} & 1 \\
0 & 0 & 1
\end{bmatrix}
=============

\begin{bmatrix}
\sqrt{2} & -\frac{3\sqrt{2}}{2} & 1 \\
\sqrt{2} & \frac{3\sqrt{2}}{2} & 1 \\
0 & 0 & 1
\end{bmatrix}
$$

이제 이 복합 변환 행렬을 점 $(2, 3, 1)$에 적용하면:

$$
\begin{bmatrix}
\sqrt{2} & -\frac{3\sqrt{2}}{2} & 1 \\
\sqrt{2} & \frac{3\sqrt{2}}{2} & 1 \\
0 & 0 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
2 \\
3 \\
1
\end{bmatrix}
=============

\begin{bmatrix}
\sqrt{2} \cdot 2 + \left(-\frac{3\sqrt{2}}{2}\right) \cdot 3 + 1 \\
\sqrt{2} \cdot 2 + \frac{3\sqrt{2}}{2} \cdot 3 + 1 \\
1
\end{bmatrix}
=============

\begin{bmatrix}
2\sqrt{2} - \frac{9\sqrt{2}}{2} + 1 \\
2\sqrt{2} + \frac{9\sqrt{2}}{2} + 1 \\
1
\end{bmatrix}
=============

\begin{bmatrix}
-\frac{5\sqrt{2}}{2} + 1 \\
\frac{13\sqrt{2}}{2} + 1 \\
1
\end{bmatrix}
$$

따라서 최종 변환된 좌표는:

$$
\left(-\frac{5\sqrt{2}}{2} + 1, \frac{13\sqrt{2}}{2} + 1\right)
$$

이로써 동차 좌표를 사용한 복합 변환의 효율성을 확인할 수 있다. 변환을 개별적으로 적용하는 대신, 복합 행렬을 사용함으로써 보다 단순하고 간결하게 변환을 수행할 수 있다.
