이동 변환

2차원 좌표에서 물체를 이동시키기 위해서는 각 점 \mathbf{P} = (x, y)에 대해 동일한 벡터 \mathbf{t} = (t_x, t_y)만큼 더하면 된다. 이를 행렬로 표현하면 다음과 같다:

\mathbf{P}' = \mathbf{P} + \mathbf{t}

동차좌표계를 사용하면 이 이동 변환을 행렬 곱셈으로 표현할 수 있다. 동차좌표계에서 점 \mathbf{P} = (x, y)\mathbf{P}_h = (x, y, 1)로 나타내어진다. 이때 이동 변환 행렬 \mathbf{T}는 다음과 같다:

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

따라서, 이동 변환은 다음과 같이 표현된다:

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

이를 전개하면 다음과 같다:

\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}
x' = x + t_x
y' = y + t_y

회전 변환

2차원 좌표에서 점을 원점 기준으로 \theta 각도만큼 회전시키기 위해서는 다음과 같은 회전 변환 행렬을 사용한다:

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

회전 변환 후의 점 \mathbf{P}'_h는 다음과 같이 계산된다:

\mathbf{P}'_h = \mathbf{R}(\theta) \mathbf{P}_h

이를 전개하면 다음과 같다:

\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}
x' = x \cos \theta - y \sin \theta
y' = x \sin \theta + y \cos \theta

확대/축소 변환

확대/축소 변환은 각 축에 대해 독립적으로 스케일링 팩터를 적용하여 수행된다. 스케일링 팩터를 s_xs_y라고 하면, 2차원 동차좌표계에서 확대/축소 변환 행렬 \mathbf{S}는 다음과 같다:

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

따라서, 확대/축소 변환 후의 점 \mathbf{P}'_h는 다음과 같이 계산된다:

\mathbf{P}'_h = \mathbf{S} \mathbf{P}_h

이를 전개하면 다음과 같다:

\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}
x' = x \cdot s_x
y' = y \cdot s_y

결합 변환

이동, 회전, 확대/축소 변환을 결합하여 하나의 복합 변환을 수행할 수 있다. 이러한 결합 변환은 개별 변환 행렬의 곱으로 표현되며, 순서에 따라 결과가 달라진다.

예시: 이동, 회전, 확대/축소의 결합

예를 들어, 점을 먼저 이동시키고, 이어서 회전시키고, 마지막으로 확대/축소하고자 하는 경우, 결합 변환 행렬 \mathbf{T}, \mathbf{R}(\theta), \mathbf{S}를 다음과 같이 적용한다:

\mathbf{C} = \mathbf{S} \mathbf{R}(\theta) \mathbf{T}

이를 통해 초기 동차좌표 점 \mathbf{P}_h = (x, y, 1)는 다음과 같이 변환된다:

\mathbf{P}'_h = \mathbf{C} \mathbf{P}_h

결합 변환의 순서

순서가 중요한 이유는 다음의 간단한 예시를 통해 확인할 수 있다. 먼저 회전하고 나서 이동하는 경우와, 먼저 이동하고 나서 회전하는 경우 각각을 비교해보자:

  1. 먼저 이동, 후에 회전:
\mathbf{T}_1 = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix}
\mathbf{R}(\theta) = \begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix}

그리고 결합 변환 행렬은:

\mathbf{C}_1 = \mathbf{R}(\theta) \mathbf{T}_1
  1. 먼저 회전, 후에 이동:
\mathbf{T}_2 = \begin{bmatrix} 1 & 0 & t_x' \\ 0 & 1 & t_y' \\ 0 & 0 & 1 \end{bmatrix}
\mathbf{R}(\theta) = \begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix}

그리고 결합 변환 행렬은:

\mathbf{C}_2 = \mathbf{T}_2 \mathbf{R}(\theta)

이처럼 동일한 변환을 수행하더라도 변환 행렬의 순서에 따라 최종 결과가 달라지게 되므로, 변환 순서를 철저히 고려하여야 한다.