# 회전 행렬과 동차좌표

#### 회전 행렬

회전 행렬은 2D 또는 3D 공간에서 점들을 회전시키기 위해 사용되는 행렬이다. 이 행렬은 점의 좌표를 특정 각도만큼 회전시키는 변환을 가능하게 한다.

**2D 회전 행렬**

2차원 공간에서 원점을 기준으로 점을 $\theta$만큼 회전시키는 행렬은 다음과 같다:

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

2D 벡터 $\mathbf{x}$에 위의 회전 행렬을 곱하면, 벡터 $\mathbf{x}$는 $\theta$만큼 회전된다:

$$
\mathbf{x'} = \mathbf{R}(\theta) \mathbf{x}
$$

여기서,

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

회전 후의 좌표 $(x', y')$는 다음과 같다:

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

#### 동차좌표계

동차좌표는 그래픽 변환에서 사용되는 좌표 시스템으로, 2D 변환을 3D 벡터와 행렬 연산으로 표현할 수 있게 한다. 이는 변환 연산 (회전, 평행이동, 스케일링 등)을 단일 행렬 곱으로 통합할 수 있게 한다.

**2D 동차좌표계**

2D 동차좌표는 2D 좌표 $(x, y)$를 3D 좌표 $(x, y, 1)$로 확장한 것이다:

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

**동차변환 행렬**

동차변환 행렬은 원래의 2D 변환 행렬을 3D 행렬로 확장한 것이다. 예를 들어, 2D 회전 행렬 $\mathbf{R}(\theta)$을 동차좌표계로 표현하면:

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

동차좌표 $\mathbf{\hat{x}}$에 위의 동차변환 행렬을 곱하면 동차좌표 $\mathbf{\hat{x'}}$는 다음과 같다:

$$
\mathbf{\hat{x'}} = \mathbf{T}(\theta) \mathbf{\hat{x}}
$$

이를 통해 회전 변환을 포함한 다양한 변환을 보다 효율적으로 계산할 수 있다. 동차좌표를 사용하면 회전과 평행이동을 동시에 적용할 수 있다.

예를 들어, 평행이동 행렬 $\mathbf{T}(t\_x, t\_y)$는 다음과 같다:

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

평행이동 후의 동차좌표 $\mathbf{\hat{x'}}$는 다음과 같다:

$$
\mathbf{\hat{x'}} = \mathbf{T}(t\_x, t\_y) \mathbf{\hat{x}}
$$

이 동차좌표계를 이용하면 여러 변환을 하나의 행렬 곱으로 연쇄적으로 적용할 수 있다. 예를 들어, 점을 회전시키고 이동시키려면 다음과 같은 결합 변환 행렬을 사용할 수 있다:

$$
\mathbf{T}\_\text{combined} = \mathbf{T}(t\_x, t\_y) \mathbf{R}(\theta)
$$

따라서 변환 후의 점 $\mathbf{\hat{x'}}$는 다음과 같이 계산할 수 있다:

$$
\mathbf{\hat{x'}} = \mathbf{T}\_\text{combined} \mathbf{\hat{x}}
$$

이렇게 동차좌표계를 사용하면 여러 변환을 간단하고 일관성 있게 적용할 수 있다.

#### 3D 회전 행렬과 동차좌표계

3차원 공간에서 회전 행렬은 특정 축을 기준으로 회전시키는 행렬이다. 세 가지 주요 회전축(x, y, z)에 대한 회전 행렬은 다음과 같다:

* x축 회전 ($\theta$만큼):

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

* y축 회전 ($\theta$만큼):

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

* z축 회전 ($\theta$만큼):

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

**3D 동차좌표계**

3D 동차좌표는 3D 좌표 $(x, y, z)$를 4D 좌표 $(x, y, z, 1)$로 확장한 것이다:

$$
\mathbf{\hat{x}} = \begin{bmatrix} x \ y \ z \ 1 \end{bmatrix}
$$

**3D 동차변환 행렬**

동차변환 행렬은 원래의 3D 변환 행렬을 4x4 행렬로 확장한 것이다. 예를 들어, 3D 회전 행렬 $\mathbf{R}\_z(\theta)$를 동차좌표계로 표현하면:

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

동차좌표 $\mathbf{\hat{x}}$에 위의 동차변환 행렬을 곱하면 동차좌표 $\mathbf{\hat{x'}}$는 다음과 같다:

$$
\mathbf{\hat{x'}} = \mathbf{T}\_z(\theta) \mathbf{\hat{x}}
$$

이 방식으로 평행이동, 회전, 스케일링 등과 같은 다양한 3D 변환을 간단한 행렬 곱셈으로 처리할 수 있다.
