동차좌표계에서 행렬을 이용한 좌표 변환에 대해 자세히 설명하겠다.

기본 개념

동차 좌표계 (Homogeneous Coordinates)에서는 일반적인 유클리드 공간의 좌표에 추가적인 차원을 더하여 행렬을 통해 쉽게 변환할 수 있다. 2차원 공간의 경우, 이를 3차원 벡터로 확장하여 표현하고, 3차원 공간의 경우 4차원 벡터로 확장한다.

2차원 변환

2차원 공간에서 동차 좌표계를 사용하기 위해서 점 (x, y)를 동차 좌표 (x, y, 1)로 확장한다.

이동 변환 (Translation)

2차원에서 점을 (t_x, t_y)만큼 이동시키는 변환은 다음과 같은 3x3 행렬로 표현된다.

\mathbf{T} = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix}

변환된 점 (x', y', 1)는 다음과 같이 계산된다.

\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \mathbf{T} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} x + t_x \\ y + t_y \\ 1 \end{bmatrix}

3차원 변환

3차원 공간에서 (x, y, z)는 동차 좌표 (x, y, z, 1)로 확장된다.

이동 변환 (Translation)

3차원에서 점을 (t_x, t_y, t_z)만큼 이동시키는 변환은 다음과 같은 4x4 행렬로 표현된다.

\mathbf{T} = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix}

변환된 점 (x', y', z', 1)은 다음과 같이 계산된다.

\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} = \mathbf{T} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x + t_x \\ y + t_y \\ z + t_z \\ 1 \end{bmatrix}

회전 변환 (Rotation)

회전 변환은 특정 축을 중심으로 점을 회전시키는 변환이다.

2차원 회전 변환

2차원에서 원점 기준 \theta 라디안 만큼 회전하는 변환은 다음과 같은 형태를 갖는다.

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

회전된 점은 아래와 같이 계산된다.

\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \mathbf{R} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} x\cos \theta - y\sin \theta \\ x\sin \theta + y\cos \theta \\ 1 \end{bmatrix}

3차원 회전 변환

3차원에서 회전 변환은 각 축을 중심으로 하는 회전으로 구분된다. 회전 행렬은 각각의 회전축에 대해 다음과 같이 정의된다.

  1. X축 회전 (Roll)

X축을 기준으로 \theta 라디안 만큼 회전하는 행렬:

\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}
  1. Y축 회전 (Pitch)

Y축을 기준으로 \theta 라디안 만큼 회전하는 행렬:

\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}
  1. Z축 회전 (Yaw)

Z축을 기준으로 \theta 라디안 만큼 회전하는 행렬:

\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}

회전된 점 (x', y', z', 1)는 각각의 회전 행렬을 사용하여 계산된다.

확대 변환 (Scaling)

확대 변환은 점의 좌표를 일정 비율로 확장하거나 축소하는 변환이다. 다음은 2차원과 3차원에서 각각의 확대 변환 행렬이다.

2차원 확대 변환

(s_x, s_y)만큼 확대하는 변환 행렬:

\mathbf{S} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix}

3차원 확대 변환

(s_x, s_y, s_z)만큼 확대하는 변환 행렬:

\mathbf{S} = \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

동차좌표계에서의 변환 조합

동차 좌표계를 사용하는 큰 장점 중 하나는 여러 변환을 연속적으로 적용할 수 있다는 것이다. 여러 변환을 조합하면 각 변환 행렬을 곱하여 하나의 행렬로 통합할 수 있다.

예를 들어, 2차원에서 먼저 회전(θ), 이후에 이동(tx, ty)을 수행하는 경우 전체 변환 행렬은 다음과 같다.

\mathbf{M} = \mathbf{T} \cdot \mathbf{R} = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \cos \theta & -\sin \theta & t_x \\ \sin \theta & \cos \theta & t_y \\ 0 & 0 & 1 \end{bmatrix}

이 변환 행렬을 점 (x, y, 1)에 적용하여 최종적인 좌표를 얻을 수 있다.


동차좌표계와 행렬을 활용하면 다양한 2차원 및 3차원 변환을 간단하고 효율적으로 수행할 수 있다. 변환을 조합하거나 복합적인 공간 변환을 수행할 때 특히 유용하며, 이를 통해 그래픽스, 로보틱스 등 다양한 분야에서 변환 작업을 체계적으로 수행할 수 있다.