# 여러 변환의 결합

### 좌표 변환의 기본 개념

좌표 변환은 그래픽스나 기하학에서 객체를 이동, 회전, 크기 조정 등의 다양한 변환을 위해 사용된다. 기본적인 2D 변환은 다음과 같다:

1. **이동 (Translation)**
2. **회전 (Rotation)**
3. **확대/축소 (Scaling)**
4. **대칭 (Reflection)**
5. **전단 (Shearing)**

각각의 변환은 행렬로 표현할 수 있으며, 복합 변환은 여러 개의 변환 행렬을 곱셈으로 결합하여 한 번의 적용으로 처리할 수 있다.

### 이동 변환 (Translation)

이동 변환은 객체를 지정된 거리만큼 평행 이동시키는 것이다. 이는 다음과 같은 형태의 행렬로 표현된다:

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

여기서 $t\_x$ 와 $t\_y$ 는 이동할 거리이다.

### 회전 변환 (Rotation)

회전 변환은 특정한 각도만큼 객체를 회전시키는 것이다. 원점을 기준으로 회전하는 경우, 회전 변환 행렬은 다음과 같다:

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

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

### 확대/축소 변환 (Scaling)

확대/축소 변환은 객체의 크기를 변경하는 것이다. 이는 다음과 같은 형태의 행렬로 표현된다:

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

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

### 대칭 변환 (Reflection)

대칭 변환은 객체를 특정 축에 대해 반사시키는 것이다. 예를 들어, y축에 대한 대칭 변환 행렬은 다음과 같다:

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

### 전단 변환 (Shearing)

전단 변환은 객체를 특정 방향으로 기울이는 변환이다. x축 방향 전단 변환 행렬은 다음과 같다:

$$
\mathbf{H\_x} = \begin{bmatrix} 1 & sh\_x & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{bmatrix}
$$

여기서 $sh\_x$ 는 x 방향 기울기이다.

### 복합 변환

복합 변환은 여러 변환을 순차적으로 적용한 결과이다. 이는 개별 변환 행렬을 곱하여 하나의 변환 행렬로 결합할 수 있다. 이를 통해 다중 변환을 한 번에 적용할 수 있다.

예를 들어, 객체를 회전하고 이동(transform matrix for rotation and translation)시키려면 다음과 같이 변환 행렬을 곱하면 된다:

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

결과적으로, 두 행렬을 곱한 복합 변환 행렬은 다음과 같다:

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

이 복합 변환 행렬은 객체를 먼저 회전시키고, 이후 이동시키는 과정을 하나의 단일 행렬로 표현한 것이다.

### 변환의 순서

변환의 순서는 결과에 크게 영향을 미치므로 주의가 필요하다. 예를 들어, 회전 이후에 이동한 결과는 이동 이후에 회전한 결과와 다를 수 있다.

#### 순서를 고려한 예시

* **회전 후 이동**

$$
\mathbf{T} \mathbf{R}(\theta)
$$

* **이동 후 회전**

$$
\mathbf{R}(\theta) \mathbf{T}
$$

각 변환의 순서에 따라 달라지는 결과를 이해하는 것은 중요한 기초 개념이다.

### 행렬의 곱셈 순서

행렬 곱셈은 결합 법칙에 따라 자주 사용되지만, 교환 법칙은 적용되지 않는다. 즉, 다음이 성립하지 않는다:

$$
\mathbf{A} \mathbf{B} \neq \mathbf{B} \mathbf{A}
$$

따라서, 복합 변환을 구성할 때 행렬의 곱셈 순서를 정확하게 이해하고 적용하는 것이 매우 중요하다.

***

여러 변환을 결합하여 복합 변환을 구성할 때 행렬의 곱셈을 통해 이를 수학적으로 간단히 표현할 수 있다. 이를 통해 복잡한 변환을 단순하게 처리하고 계산할 수 있다. 변환 순서를 지정하면 결과를 예측하고 조절하는 데 도움이 된다. 이를 활용한 예시는 다양한 컴퓨터 그래픽스와 물리 시뮬레이션에서 실제로 적용되고 있다.
