# 3차원 공간에서의 표현

3차원 동차좌표계에서는 좌표 $\mathbf{p} = (x, y, z)$ 를 동차 좌표 $\mathbf{P}\_h = (x, y, z, w)$ 로 표현한다. 동차좌표계의 가장 큰 장점은 기하학적 변환(회전, 이동, 스케일링 등)을 행렬 연산으로 통일되게 다룰 수 있다는 점이다.

#### 동차좌표의 정의

3차원 공간에서의 점 $\mathbf{p}$ 를 동차 좌표계로 표현하면 다음과 같이 나타낼 수 있다:

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

여기서 $w$ 는 동차 좌표(w-좌표)로, 일반적으로 $w = 1$ 로 설정된다. 따라서, 원래의 좌표 $\mathbf{p}$ 는 $\mathbf{P}\_h$ 에서 $w$ 를 나누어 얻는다:

$$
\mathbf{p} = \begin{bmatrix} x' \ y' \ z' \end{bmatrix} = \begin{bmatrix} \frac{x}{w} \ \frac{y}{w} \ \frac{z}{w} \end{bmatrix}
$$

#### 변환 행렬

3차원 공간에서의 변환을 동차좌표계로 표현하기 위해서는 4x4 변환행렬을 사용한다. 변환행렬은 다음과 같은 형태를 갖는다:

$$
\mathbf{T} = \begin{bmatrix} a\_{11} & a\_{12} & a\_{13} & a\_{14} \ a\_{21} & a\_{22} & a\_{23} & a\_{24} \ a\_{31} & a\_{32} & a\_{33} & a\_{34} \ a\_{41} & a\_{42} & a\_{43} & a\_{44} \end{bmatrix}
$$

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

$$
\mathbf{P}'\_h = \mathbf{T} \mathbf{P}\_h
$$

#### 이동 변환

이동 변환은 공간의 점을 일정한 벡터 $\mathbf{d} = (d\_x, d\_y, d\_z)$ 만큼 이동시키는 변환이다. 이를 동차 좌표계로 표현하면 다음과 같다:

$$
\mathbf{T}\_\text{translation} = \begin{bmatrix} 1 & 0 & 0 & d\_x \ 0 & 1 & 0 & d\_y \ 0 & 0 & 1 & d\_z \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

#### 회전 변환

회전 변환은 3차원 공간의 점을 주어진 축을 중심으로 회전시키는 변환이다. 각 축에 대한 회전행렬은 아래와 같다:

**X축 회전**

$$
\mathbf{T}\_\text{rotation, X}(\theta) = \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & \cos\theta & -\sin\theta & 0 \ 0 & \sin\theta & \cos\theta & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

**Y축 회전**

$$
\mathbf{T}\_\text{rotation, Y}(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta & 0 \ 0 & 1 & 0 & 0 \ -\sin\theta & 0 & \cos\theta & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

**Z축 회전**

$$
\mathbf{T}\_\text{rotation, Z}(\theta) = \begin{bmatrix} \cos\theta & -\cos\theta & 0 & 0 \ \sin\theta & \cos\theta & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

#### 스케일링 변환

스케일링 변환은 점을 원점에 대한 일정 비율로 확대하거나 축소시키는 변환이다. 스케일링 행렬은 다음과 같다:

$$
\mathbf{T}\_\text{scaling} = \begin{bmatrix} s\_x & 0 & 0 & 0 \ 0 & s\_y & 0 & 0 \ 0 & 0 & s\_z & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

여기서 $s\_x$, $s\_y$, $s\_z$ 는 각각 x, y, z축 방향의 스케일링 비율이다.

#### 변환 행렬의 조합

여러 변환을 연속적으로 적용하려면 각 변환 행렬을 곱셈하여 하나의 변환 행렬로 결합할 수 있다. 예를 들어, 먼저 이동하고 회전한 다음 스케일링을 적용하려면 다음과 같이 행렬들을 곱셈한다:

$$
\mathbf{T}*\text{combined} = \mathbf{T}*\text{scaling} \cdot \mathbf{T}*\text{rotation} \cdot \mathbf{T}*\text{translation}
$$

이렇게 변환 행렬을 결합하면 단 한 번의 행렬 곱셈으로 일련의 변환을 적용할 수 있다.

#### 예제: 복합 변환

하나의 예제로 x축 방향으로 2 단위 이동, z축 회전 90도 ( $\theta = \frac{\pi}{2}$ ), 그리고 모든 축에 대해 0.5 비율로 스케일링 하는 복합 변환을 보겠다.

1. 이동 변환:

$$
\mathbf{T}\_\text{translation} = \begin{bmatrix} 1 & 0 & 0 & 2 \ 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

2. 회전 변환 ( Z축 회전):

$$
\mathbf{T}\_\text{rotation, Z}\left( \frac{\pi}{2} \right) = \begin{bmatrix} \cos\left(\frac{\pi}{2}\right) & -\sin\left(\frac{\pi}{2}\right) & 0 & 0 \ \sin\left(\frac{\pi}{2}\right) & \cos\left(\frac{\pi}{2}\right) & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & -1 & 0 & 0 \ 1 & 0 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

3. 스케일링 변환:

$$
\mathbf{T}\_\text{scaling} = \begin{bmatrix} 0.5 & 0 & 0 & 0 \ 0 & 0.5 & 0 & 0 \ 0 & 0 & 0.5 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

4. 복합 변환 행렬:

$$
\mathbf{T}*\text{combined} = \mathbf{T}*\text{scaling} \cdot \mathbf{T}*\text{rotation, Z}\left( \frac{\pi}{2} \right) \cdot \mathbf{T}*\text{translation}
$$

$$
\mathbf{T}\_\text{combined} = \begin{bmatrix} 0.5 & 0 & 0 & 0 \ 0 & 0.5 & 0 & 0 \ 0 & 0 & 0.5 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 0 & -1 & 0 & 0 \ 1 & 0 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 1 & 0 & 0 & 2 \ 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

$$
\mathbf{T}\_\text{combined} = \begin{bmatrix} 0 & -0.5 & 0 & 0 \ 0.5 & 0 & 0 & 1 \ 0 & 0 & 0.5 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$

이 변환 행렬을 사용하여 동차 좌표 $\mathbf{P}\_{h}$에 적용하면, 해당 점에 대해 일련의 변환이 적용된다.
