3차원 컴퓨터 그래픽스나 기하학에서, 동차좌표(homogeneous coordinates)는 좌표를 표현하는 데 사용되는 강력한 도구이다. 이 좌표계를 사용하면 변환 행렬을 사용하여 다양한 기하학적 변환을 쉽게 수행할 수 있으며, 이는 아핀 변환을 처리하는 데 특히 유용하다.
동차좌표
동차좌표계는 n 차원 공간의 점을 n+1 차원 공간의 점으로 표현하는 방법이다. 3차원 공간의 점 (x, y, z)는 4차원 동차좌표 (x, y, z, w)로 표현될 수 있다. 여기서 w는 동차 좌표의 가중치(scale factor)이다.
일반적으로, 동차좌표 (x, y, z, w)에서 실제 3차원 좌표 (x, y, z)로 변환하려면 동차좌표를 w로 나누면 된다: $$ (x, y, z) = \left(\frac{x}{w}, \frac{y}{w}, \frac{z}{w}\right) $$
동차좌표를 사용하면 w=1인 상태에서 추가적인 스케일링 없이도 점을 표현할 수 있다.
아핀 변환
아핀 변환(affine transformation)은 선의 평행성을 보존하는 기하학적 변환을 말한다. 이는 선형 변환과 평행 이동의 조합으로 이루어지며, 3차원 공간에서 아핀 변환을 수학적으로 다루기 위해 4x4 동차 좌표 행렬을 사용한다.
아핀 변환을 적용하려면 동차좌표계를 사용하여 점이나 벡터를 표현해야 한다. 이는 점 (x, y, z)를 동차좌표계 (x, y, z, 1)로 변환한 뒤, 아핀 변환 행렬 \mathbf{A}를 사용하여 변환한다.
3차원 공간에서의 아핀 변환 행렬은 다음과 같은 형태를 갖는다: $$ \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & a_{13} & t_x \ a_{21} & a_{22} & a_{23} & t_y \ a_{31} & a_{32} & a_{33} & t_z \ 0 & 0 & 0 & 1 \end{bmatrix} $$
여기서 \mathbf{A}는 회전, 스케일링, 시어링 등을 나타내는 3 \times 3 행렬 부분과 평행 이동을 나타내는 3 \times 1 벡터 (t_x, t_y, t_z)로 구성된다.
동차좌표를 이용한 변환
변환을 적용하려면 동차좌표 (x, y, z, 1)에 변환 행렬 \mathbf{A}를 곱해야 한다: $$ \mathbf{p'} = \mathbf{A} \mathbf{p} $$ 여기서 \mathbf{p'}는 변환된 점의 동차좌표이고, \mathbf{p} = (x, y, z, 1)는 원래 점이다.
행렬 곱셈을 하면 다음과 같다: $$ \begin{bmatrix} x' \ y' \ z' \ 1 \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & a_{13} & t_x \ a_{21} & a_{22} & a_{23} & t_y \ a_{31} & a_{32} & a_{33} & t_z \ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \ y \ z \ 1 \end{bmatrix} $$ $$ \rightarrow \begin{cases} x' = a_{11}x + a_{12}y + a_{13}z + t_x \ y' = a_{21}x + a_{22}y + a_{23}z + t_y \ z' = a_{31}x + a_{32}y + a_{33}z + t_z \ \end{cases} $$
이로써 아핀 변환이 적용된 새로운 좌표 (x', y', z')를 얻을 수 있다.
예제와 응용
동차좌표와 아핀 변환을 실제로 어떻게 사용하는지 시각적으로 이해하기 위해 몇 가지 예제를 살펴보겠다.
1. 회전 변환
3차원 공간에서 점을 회전시키려면 회전 행렬을 사용해야 한다. 예를 들어, x축을 기준으로 \theta 만큼 회전시키는 회전 행렬은 다음과 같다: $$ \mathbf{R}_x(\theta) = \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & \cos\theta & -\sin\theta & 0 \ 0 & \sin\theta & \cos\theta & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$
이 회전 변환을 이용해 점 (x, y, z)을 회전시키면: $$ \mathbf{p'} = \mathbf{R}_x(\theta) \mathbf{p} $$
2. 평행 이동
평행 이동은 단순히 점의 위치를 이동시키는 변환이다. 평행 이동 행렬은 다음과 같다: $$ \mathbf{T}(t_x, t_y, t_z) = \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)을 (t_x, t_y, t_z)만큼 이동시키면: $$ \mathbf{p'} = \mathbf{T}(t_x, t_y, t_z) \mathbf{p} $$
3. 스케일링
점의 크기를 조절하는 스케일링 변환 행렬은 다음과 같다: $$ \mathbf{S}(s_x, s_y, s_z) = \begin{bmatrix} s_x & 0 & 0 & 0 \ 0 & s_y & 0 & 0 \ 0 & 0 & s_z & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$
이 행렬을 사용하여 점 (x, y, z)을 스케일링하면: $$ \mathbf{p'} = \mathbf{S}(s_x, s_y, s_z) \mathbf{p} $$
종합적인 변환 응용
여러 가지 아핀 변환을 결합하여 복잡한 변환을 수행할 수 있다. 예를 들어, 점을 먼저 회전시키고, 평행 이동한 뒤, 스케일링하는 변환을 정의할 수 있다. 이는 다음과 같은 행렬 곱셈으로 나타낼 수 있다:
이와 같이, 동차좌표와 아핀 변환을 사용하면 복잡한 기하학적 변환을 쉽고 일관성 있게 처리할 수 있다.
추가 자료와 연습 문제
동차좌표와 아핀 변환을 포함한 다양한 3D 기하학적 변환을 다루기 위해 다음과 같은 연습 문제를 수행해 볼 수 있다:
- 주어진 점 (1, 2, 3)을 y축을 기준으로 각각 45도 회전시키고, (5, -3, 2)만큼 이동시키고, x축 방향으로 2배 스케일링한 결과를 계산하시오.
- 주어진 3x3 회전 행렬과 3x1 이동 벡터를 이용하여 4x4 동차좌표 변환 행렬을 구성하고, 임의의 점 (x, y, z)에 적용하여 변환 결과를 도출하시오.
- 주어진 점들이 이루는 도형을 임의의 평면에 대해 반사시키는 변환 행렬을 정의하고, 이를 이용해 점들의 새로운 위치를 계산하시오.
위의 문제를 풀어나가면서 동차좌표와 아핀 변환의 개념을 보다 더 확실히 이해할 수 있을 것이다.