동차좌표계에서 행렬을 이용한 좌표 변환에 대해 자세히 설명하겠다.
기본 개념
동차 좌표계 (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차원에서 회전 변환은 각 축을 중심으로 하는 회전으로 구분된다. 회전 행렬은 각각의 회전축에 대해 다음과 같이 정의된다.
- 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}
- 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}
- 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차원 변환을 간단하고 효율적으로 수행할 수 있다. 변환을 조합하거나 복합적인 공간 변환을 수행할 때 특히 유용하며, 이를 통해 그래픽스, 로보틱스 등 다양한 분야에서 변환 작업을 체계적으로 수행할 수 있다.