회전 행렬

회전 행렬은 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)에 대한 회전 행렬은 다음과 같다:

\mathbf{R}_x(\theta) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix}
\mathbf{R}_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix}
\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 변환을 간단한 행렬 곱셈으로 처리할 수 있다.