# 동차좌표와 아핀 변환

### 동차좌표 시스템

동차좌표(homogeneous coordinate) 시스템은 기존의 유클리드 좌표를 확장한 것이다. 2차원 동차좌표는 일반적으로 $(x, y, w)$의 형태로 표현되며, 여기서 $w$는 동차 좌표의 스케일 인수이다. 유클리드 좌표 $(x, y)$는 동차좌표 $(x, y, 1)$로 변환될 수 있다.

#### 동차좌표의 정의

동차좌표는 기본적으로 다음과 같이 정의된다:

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

여기서 $x$와 $y$는 점의 유클리드 좌표이고 $w$는 동차 인수이다. 유클리드 좌표계에서의 점 $(x\_e, y\_e)$는 다음과 같이 동차좌표로 표현될 수 있다:

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

### 아핀 변환

아핀 변환(affine transformation)은 점, 직선, 그리고 평면 등의 기하학적 객체를 변환하는데 사용된다. 이러한 변환에는 회전, 이동, 축소 및 확대 등이 포함된다. 아핀 변환은 선형 변환을 포함하며, 이는 다음과 같은 일반적인 형태로 표현될 수 있다:

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

#### 행렬 표현

2차원 아핀 변환은 $3 \times 3$ 행렬 $\mathbf{A}$를 사용하여 나타낼 수 있다:

$$
\mathbf{A} = \begin{bmatrix} a\_{11} & a\_{12} & a\_{13} \ a\_{21} & a\_{22} & a\_{23} \ 0 & 0 & 1 \end{bmatrix}
$$

변환된 동차좌표 $\mathbf{p\_H}'$는 다음과 같이 계산된다:

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

여기서,

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

예를 들어, 좌표 $(x, y)$가 아핀 변환 행렬 $\mathbf{A}$에 의해 변환되는 과정은 다음과 같다:

$$
\begin{bmatrix} x' \ y' \ 1 \end{bmatrix} = \begin{bmatrix} a\_{11} & a\_{12} & a\_{13} \ a\_{21} & a\_{22} & a\_{23} \ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \ y \ 1 \end{bmatrix}
$$

이는 이렇게 전개될 수 있다:

$$
x' = a\_{11} x + a\_{12} y + a\_{13}
$$

$$
y' = a\_{21} x + a\_{22} y + a\_{23}
$$

#### 특성 및 응용

아핀 변환의 유용한 속성 중 하나는 선형성과 평행성의 보존이다. 이는 아핀 변환이 적용되는 동안 직선은 여전히 직선으로 유지되고, 평행한 직선을 그대로 평행함을 유지한다는 것을 의미한다.

다양한 그래픽 응용 프로그램에서 아핀 변환은 객체의 회전, 이동, 축소 및 확대를 수행하는 데 사용된다.

### 아핀 변환의 주요 유형

아핀 변환은 몇 가지 기본적인 변환을 포함한다. 이들 변환은 개별적으로 또는 조합하여 사용될 수 있다.

#### 1. 이동 변환 (Translation)

이동 변환은 좌표를 평행하게 이동시키는 변환이다. 이동 변환의 동차 좌표 행렬은 다음과 같이 표현된다:

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

여기서 $t\_x$와 $t\_y$는 각각 x축 및 y축 방향으로의 이동 거리이다.

#### 2. 축척 변환 (Scaling)

축척 변환은 좌표를 크기 조정하는 변환이다. 동차 좌표 행렬은 다음과 같다:

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

여기서 $s\_x$와 $s\_y$는 각각 x축 및 y축 방향의 스케일 인수이다.

#### 3. 회전 변환 (Rotation)

회전 변환은 좌표를 회전시키는 변환이다. 다음과 같이 표현된다:

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

여기서 $\theta$는 회전 각도이다.

#### 4. 반사 변환 (Reflection)

반사 변환은 좌표를 대칭 축을 기준으로 반사시키는 변환이다. 예를 들어, x축을 기준으로 반사시키는 행렬은 다음과 같다:

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

#### 5. 전단 변환 (Shear)

전단 변환은 한 축에 대해 좌표를 기울이는 변환이다. y축에 대한 전단 변환 행렬은 다음과 같다:

$$
\mathbf{H}\_y = \begin{bmatrix} 1 & h & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{bmatrix}
$$

여기서 $h$는 전단 인수이다.

### 아핀 변환 행렬의 결합

다수의 아핀 변환을 연속적으로 적용하려면 각 변환의 동차 좌표 행렬을 곱하여 하나의 행렬로 결합할 수 있다. 예를 들어, 이동 변환 $\mathbf{T}$, 축척 변환 $\mathbf{S}$, 및 회전 변환 $\mathbf{R}$의 결합은 다음과 같이 계산된다:

$$
\mathbf{A} = \mathbf{T} \cdot \mathbf{S} \cdot \mathbf{R}
$$

이처럼 결합된 행렬 $\mathbf{A}$는 단일 단계의 아핀 변환으로 동일한 결과를 적용할 수 있게 한다.
