동차좌표계(Homogeneous Coordinates)는 컴퓨터 그래픽스와 기하학적인 변환에 주로 사용되는 좌표 표현 방식이다. 이는 차원을 하나 더 추가하여 변환 행렬의 일관성을 유지하고, 병렬 이동 등의 변환을 쉽게 수행할 수 있게 해준다. 이를 통해, 2차원 및 3차원 공간에서의 여러 기하학적 변환(회전, 이동, 스케일링 등)을 간단하게 표현할 수 있다.

동차좌표계 기본 개념

일반적으로 2차원 평면상의 점 (x, y)는 동차좌표계에서 (x, y, 1)로 표현된다. 같은 방식으로 3차원 공간상의 점 (x, y, z)는 동차좌표계에서 (x, y, z, 1)로 표현된다. 여기서 마지막 성분인 '1'은 변환을 단순화하고 일관성을 유지하는 데 사용된다.

동차좌표계로의 변환

원래의 좌표를 동차좌표계로 변환하는 과정은 간단한다. w = 1을 추가하여 다음과 같이 표현한다:

행렬을 통한 변환 수행

동차좌표계에서는 여러 가지 기하학적 변환을 행렬 곱셈을 통해 쉽게 수행할 수 있다. 일반적으로 사용되는 변환 행렬에는 다음과 같은 것들이 있다:

2차원 변환 행렬

\mathbf{T} = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix}
\mathbf{R} = \begin{bmatrix} \cos{\theta} & -\sin{\theta} & 0 \\ \sin{\theta} & \cos{\theta} & 0 \\ 0 & 0 & 1 \end{bmatrix}
\mathbf{S} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix}

이와 같은 변환 행렬들을 이용하여 동차좌표계에서 좌표 변환을 수행하면 된다. 예를 들어, 이동 변환을 수행하기 위해서는 다음과 같이 계산한다:

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

여기서 \mathbf{P}는 원래의 점을 동차좌표계로 표현한 벡터이다.

3차원 변환 행렬

3차원 변환 행렬은 4x4 형태로 표현된다:

\mathbf{T_3} = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix}
\mathbf{R_x} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos{\theta} & -\sin{\theta} & 0 \\ 0 & \sin{\theta} & \cos{\theta} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
\mathbf{R_y} = \begin{bmatrix} \cos{\theta} & 0 & \sin{\theta} & 0 \\ 0 & 1 & 0 & 0 \\ -\sin{\theta} & 0 & \cos{\theta} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
\mathbf{R_z} = \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{M} = \mathbf{T} \mathbf{R}

여기서 \mathbf{M}은 결합된 변환 행렬이다. 이런 방식으로 복잡한 변환을 하나의 행렬로 단순화할 수 있다.

좌표계의 변경

좌표계의 변경은 다른 기준 시스템으로 객체를 표현하는 과정이다. 이를 통해, 동일한 객체지만 다른 참조 프레임에서 어떻게 보이는지를 이해할 수 있다. 주로 사용되는 변환 방식은 선형 변환과 순차적인 회전과 병렬 이동을 포함한다.

행렬을 통한 좌표계 변경

좌표계의 변경은 보통 두 좌표계 간의 변환 행렬을 통해 이루어진다. 변환 행렬을 이용해 한 좌표계에서 다른 좌표계로의 변환을 수행할 수 있다. 기본적으로 변환 행렬은 회전 행렬과 이동 벡터로 구성된다.

회전 행렬

회전 행렬은 두 좌표계 간의 회전을 나타낸다. 예를 들어, 두 좌표계 AB가 있을 때, 좌표계 A에서 좌표계 B로 변환하는 회전 행렬 \mathbf{R_{AB}}는 다음과 같이 정의될 수 있다:

\mathbf{R_{AB}} = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix}

여기서 각 r_{ij}는 회전의 성분을 나타낸다.

이동 벡터

이동 벡터는 두 좌표계 간의 병렬 이동을 나타낸다. 좌표계 A에서 좌표계 B로의 이동 벡터 \mathbf{T_{AB}}는 다음과 같이 정의될 수 있다:

\mathbf{T_{AB}} = \begin{bmatrix} t_x \\ t_y \\ t_z \end{bmatrix}

여기서 t_x, t_y, t_z는 각각 x, y, z 방향으로의 이동을 나타낸다.

변환 행렬의 적용

변환 행렬을 좌표 \mathbf{P}에 적용하면, 새로운 좌표 \mathbf{P'}를 얻을 수 있다. 이는 다음과 같이 표현된다:

\mathbf{P'_B} = \mathbf{R_{AB}} \mathbf{P_A} + \mathbf{T_{AB}}

이 식은 좌표계 A에서 표현된 점 \mathbf{P_A}를 좌표계 B에서의 새로운 점 \mathbf{P'_B}로 변환하는 과정을 나타낸다.

예제

  1. 회전 변환: 30도 각도로 시계 방향으로 회전하는 변환 행렬은 다음과 같다.
\mathbf{R} = \begin{bmatrix} \cos{30^\circ} & -\sin{30^\circ} \\ \sin{30^\circ} & \cos{30^\circ} \end{bmatrix} = \begin{bmatrix} \frac{\sqrt{3}}{2} & -\frac{1}{2} \\ \frac{1}{2} & \frac{\sqrt{3}}{2} \end{bmatrix}
  1. 병렬 이동: x 방향으로 2 단위, y 방향으로 3 단위 이동하는 변환은 다음과 같다.
\mathbf{T} = \begin{bmatrix} 2 \\ 3 \end{bmatrix}

이 두 변환을 결합한 완전한 변환 행렬은 다음과 같다:

\mathbf{P'_B} = \mathbf{R} \mathbf{P_A} + \mathbf{T}

마지막으로 동차좌표계를 사용하면 더 편리하게 표현할 수 있다:

\mathbf{M} = \begin{bmatrix} \mathbf{R} & \mathbf{T} \\ \mathbf{0} & 1 \end{bmatrix} = \begin{bmatrix} \frac{\sqrt{3}}{2} & -\frac{1}{2} & 2 \\ \frac{1}{2} & \frac{\sqrt{3}}{2} & 3 \\ 0 & 0 & 1 \end{bmatrix}

따라서 동차 좌표 \mathbf{P} = (x, y, 1)에 적용 시:

\mathbf{P'} = \mathbf{M} \mathbf{P}

를 통해 좌표 변환을 쉽게 수행할 수 있다.