# 이동 행렬과 동차좌표

동차좌표계와 이동 변환에 대해 설명하기 위해 기본 개념부터 설명하겠다. 이동 변환에서는 점의 위치를 표현하는 방법이 중요하며, 이는 동차좌표를 사용하여 간단하게 표현할 수 있다.

#### 동차좌표

동차좌표(|Homogeneous Coordinates|)는 유클리드 공간의 점을 \textit{n}차원 벡터로 표현하는 방법이다. 2차원 평면의 점 $\mathbf{p} = (x, y)$를 동차좌표로 표현하면, 추가적인 차원 (일반적으로 1)으로 표현된다. 이를 통해 다음과 같은 형태로 변형할 수 있다:

$$
\mathbf{p\_h} = \begin{bmatrix} x \ y \ 1 \end{bmatrix}
$$

여기서, $\mathbf{p\_h}$는 점 $\mathbf{p}$의 동차좌표이다. 동차좌표의 장점 중 하나는 점을 선형 변환 행렬로 쉽게 변환할 수 있다는 점이다.

#### 이동 변환

이동 변환(|Translation Transformation|)은 좌표계에서 점의 위치를 일정한 값을 더하거나 빼서 변경하는 변환이다. 2차원 평면에서 점 $\mathbf{p} = (x, y)$를 $(t\_x, t\_y)$만큼 이동하면, 새로운 점 $\mathbf{p'}$는 다음과 같이 표현할 수 있다:

$$
\mathbf{p'} = \begin{bmatrix} x' \ y' \ 1 \end{bmatrix} = \begin{bmatrix} x + t\_x \ y + t\_y \ 1 \end{bmatrix}
$$

이 식을 동차좌표 변환 행렬로 나타내면 더욱 간단해진다. 동차좌표계를 사용하여 이동 변환은 다음과 같은 행렬 곱셈으로 표현할 수 있다:

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

이를 통해 점 $\mathbf{p}$의 동차좌표 $\mathbf{p\_h}$를 변환하면 다음과 같다:

$$
\mathbf{p'\_h} = \mathbf{T} \cdot \mathbf{p\_h}
$$

$$
\mathbf{p'\_h} = \begin{bmatrix} 1 & 0 & t\_x \ 0 & 1 & t\_y \ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} x \ y \ 1 \end{bmatrix} = \begin{bmatrix} x + t\_x \ y + t\_y \ 1 \end{bmatrix}
$$

여기서 변환된 점 $\mathbf{p'}$는 원래의 점 $\mathbf{p}$에서 $(t\_x, t\_y)$만큼 이동된 위치를 나타낸다. 이를 통해 이동 변환을 행렬 연산으로 직관적이고 일관되게 처리할 수 있게 된다.

#### 예시

이제 구체적인 예를 통해 이동 변환을 적용해 보자.

예를 들어, 2차원 평면상의 점 $(3, 4)$를 $(2, -1)$만큼 이동시키고 싶다고 가정하자. 이 점을 동차좌표로 표현하면 다음과 같다:

$$
\mathbf{p} = \begin{bmatrix} 3 \ 4 \ 1 \end{bmatrix}
$$

이동 변환 행렬 $\mathbf{T}$는 다음과 같이 된다:

$$
\mathbf{T} = \begin{bmatrix} 1 & 0 & 2 \ 0 & 1 & -1 \ 0 & 0 & 1 \end{bmatrix}
$$

이제 이동 변환을 점 $\mathbf{p}$에 적용하면:

$$
\mathbf{p'\_h} = \mathbf{T} \cdot \mathbf{p\_h}
$$

$$
\begin{bmatrix} 1 & 0 & 2 \ 0 & 1 & -1 \ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 3 \ 4 \ 1 \end{bmatrix} = \begin{bmatrix} 1 \cdot 3 + 0 \cdot 4 + 2 \cdot 1 \ 0 \cdot 3 + 1 \cdot 4 + (-1) \cdot 1 \ 0 \cdot 3 + 0 \cdot 4 + 1 \cdot 1 \end{bmatrix} = \begin{bmatrix} 3 + 2 \ 4 - 1 \ 1 \end{bmatrix} = \begin{bmatrix} 5 \ 3 \ 1 \end{bmatrix}
$$

따라서 새로운 점 $\mathbf{p'}$는 $(5, 3)$가 된다. 이는 원래 점 $(3, 4)$에서 $(2, -1)$만큼 이동한 결과이다.

#### 일반적인 2D 변환

동차 좌표계를 사용하면 이동 변환 외에도 회전, 축소, 확대 등의 변환을 같은 방식으로 행렬 연산으로 표현할 수 있어 매우 유용하다.

**회전 변환**

각도 $\theta$만큼 회전하는 변환 행렬은 다음과 같다:

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

**축소/확대 변환**

각 축을 따라 축소 또는 확대하는 변환 행렬은 다음과 같다:

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

이들 변환을 조합하여 다양한 복합 변환을 쉽게 수행할 수 있다.

***

동차 좌표계를 사용하면 2D 평면에서의 이동, 회전, 확대/축소 등 다양한 변환을 단일한 행렬 연산으로 통합하여 처리할 수 있다. 이를 통해 복잡한 변환을 간단하고 효율적으로 계산할 수 있다. 이러한 특성 덕분에 동차 좌표계는 컴퓨터 그래픽스, 이미지 처리, 로보틱스 등 다양한 분야에서 널리 사용된다.
