# 2D 및 3D 회전 변환

#### 2D 회전 변환

2D 공간에서의 회전 변환은 주로 회전 행렬을 사용하여 수행된다. 이는 일반적으로 원점 기준으로 점을 회전시키는데, 특정 $\theta$ 라디안만큼 회전하는 변환을 정의한다.

**회전 행렬**

임의의 점 $\mathbf{p} = \[x, y]$를 $\theta$ 라디안만큼 회전시키려면, 회전 행렬 $\mathbf{R}$을 사용하여 다음과 같이 계산한다:

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

**회전 변환 적용**

이를 사용하여 점 $\mathbf{p} = \[x, y]$에 회전 변환을 적용하면:

$$
\mathbf{p}' = \mathbf{R} \mathbf{p}
$$

즉,

$$
\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=============

\begin{bmatrix}
\cos{\theta} & -\sin{\theta} \\
\sin{\theta} & \cos{\theta}
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
$$

따라서, 회전된 점 $\mathbf{p}' = \[x', y']$의 좌표는 다음과 같다:

$$
x' = x \cos{\theta} - y \sin{\theta}
$$

$$
y' = x \sin{\theta} + y \cos{\theta}
$$

#### 3D 회전 변환

3D 공간에서의 회전 변환은 축(axis) 주변의 회전으로 정의된다. 3D 회전에 필요한 주요 회전 행렬은 x축, y축, z축에 대한 각각의 회전 행렬로 구분된다.

**X축에 대한 회전**

$\theta$ 라디안만큼 X축을 중심으로 회전하는 행렬 $\mathbf{R\_x}$는 다음과 같이 표현된다:

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

**Y축에 대한 회전**

$\theta$ 라디안만큼 Y축을 중심으로 회전하는 행렬 $\mathbf{R\_y}$는 다음과 같이 표현된다:

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

**Z축에 대한 회전**

$\theta$ 라디안만큼 Z축을 중심으로 회전하는 행렬 $\mathbf{R\_z}$는 다음과 같이 표현된다:

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

**회전 변환 적용**

3D 공간의 점 $\mathbf{p} = \[x, y, z]$에 대한 회전 변환은 다음과 같이 표현된다:

$$
\mathbf{p}' = \mathbf{R} \mathbf{p}
$$

여기서 $\mathbf{R}$은 원하는 축에 대한 회전 행렬 (예: $\mathbf{R\_x}$, $\mathbf{R\_y}$, $\mathbf{R\_z}$)이 될 수 있다.

3D 회전은 종종 여러 축에 대해 순차적으로 회전 변환을 적용해야 하며, 이러한 경우 회전 기하와 관련된 복합 변환(matrix multiplication)을 사용한다.

### 동차좌표계 (Homogeneous Coordinates)

동차 좌표계는 통상적인 Cartesian 좌표계를 확장하여 그래픽 변환, 특히 3D 그래픽과 컴퓨터 비전에서 변환을 보다 쉽게 다룰 수 있게 한다. 이는 일반적인 선형 변환 외에 평행 이동을 4x4 행렬 연산으로 표현할 수 있게 해준다.

#### 2D 동차 좌표계

**정의**

2D 공간의 동차 좌표계는 기존의 2D 점 $\[x, y]$를 3개의 값 $\[x, y, 1]$로 확장하여 나타낸다. 여기서 마지막 요소인 1은 "규격화(w)" 변수가 된다.

**변환 행렬**

일반적인 2D 변환(회전, 이동, 확대/축소)은 3x3 동차 행렬로 표현할 수 있다. 예를 들어, 변환 행렬 $\mathbf{T}$는 다음과 같이 나타낼 수 있다:

$$
\mathbf{T} =
\begin{bmatrix}
a & b & tx \\
c & d & ty \\
0 & 0 & 1
\end{bmatrix}
$$

여기서:

* $a, b, c, d$는 선형 변환 성분 (예: 회전, 확대/축소)을 나타낸다.
* $tx, ty$는 이동 변환 성분을 나타낸다.

**변환 적용**

원래 점 $\mathbf{p} = \[x, y, 1]^T$에 변환 행렬 $\mathbf{T}$를 적용하면 변환된 점 $\mathbf{p'} = \[x', y', 1]^T$는 다음과 같이 계산된다:

$$
\begin{bmatrix}
x' \\
y' \\
1
\end{bmatrix} =
\begin{bmatrix}
a & b & tx \\
c & d & ty \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y \\
1
\end{bmatrix}
$$

#### 3D 동차 좌표계

**정의**

3D 공간의 동차 좌표계는 기존의 3D 점 $\[x, y, z]$를 4개의 값 $\[x, y, z, 1]$로 확장하여 나타낸다.

**변환 행렬**

3D 변환(회전, 이동, 확대/축소)은 4x4 동차 행렬로 표현된다. 변환 행렬 $\mathbf{T}$는 다음과 같이 나타낼 수 있다:

$$
\mathbf{T} =
\begin{bmatrix}
r\_1 & r\_2 & r\_3 & tx \\
r\_4 & r\_5 & r\_6 & ty \\
r\_7 & r\_8 & r\_9 & tz \\
0 & 0 & 0 & 1
\end{bmatrix}
$$

여기서:

* $r\_i$들은 회전 및 확대/축소 성분을 나타낸다.
* $tx, ty, tz$는 이동 변환 성분을 나타낸다.

**변환 적용**

원래 점 $\mathbf{p} = \[x, y, z, 1]^T$에 변환 행렬 $\mathbf{T}$을 적용하면, 변환된 점 $\mathbf{p'} = \[x', y', z', 1]^T$는 다음과 같이 계산된다:

$$
\begin{bmatrix}
x' \\
y' \\
z' \\
1
\end{bmatrix} =
\begin{bmatrix}
r\_1 & r\_2 & r\_3 & tx \\
r\_4 & r\_5 & r\_6 & ty \\
r\_7 & r\_8 & r\_9 & tz \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y \\
z \\
1
\end{bmatrix}
$$

#### 동차 좌표계의 장점

1. **통합된 변환**: 회전, 이동, 확대/축소 등의 변환을 하나의 행렬 연산으로 처리할 수 있다.
2. **평행 이동의 표현**: 3x3 또는 4x4 행렬을 사용하여 평행 이동을 선형 변환과 함께 처리할 수 있다.
3. **행렬 곱 활용**: 여러 변환을 연이어 적용할 때, 행렬 곱셈을 사용하여 효율적으로 계산할 수 있다.

이러한 이유로 동차 좌표계는 컴퓨터 그래픽스 및 컴퓨터 비전에서 중요한 도구로 사용된다.
