좌표 변환: 이동, 회전, 확대/축소

이동 변환

이동 변환은 원점을 기준으로 벡터 $\mathbf{t} = (t_x, t_y, t_z)$만큼 좌표를 평행 이동시키는 것을 말한다. 이는 동차좌표계를 사용하면 다음과 같이 표현할 수 있다.

이동 변환을 $\mathbf{T}$ 행렬로 나타내면:

T=[100tx010ty001tz0001]\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}

3차원 점 $\mathbf{p} = (x, y, z, 1)$을 이동시키려면, $\mathbf{p}'$를 구하는 식은 다음과 같다.

p=Tp\mathbf{p}' = \mathbf{T} \mathbf{p}

이를 풀어서 쓰면:

[xyz1]=[100tx010ty001tz0001][xyz1]=[x+txy+tyz+tz1]\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}

따라서, 이동된 좌표는 $\mathbf{p}' = (x + t_x, y + t_y, z + t_z)$가 된다.

회전 변환

회전 변환은 특정 축을 중심으로 주어진 각도만큼 회전시키는 것을 말한다. 회전 변환은 축에 따라 다른 변환 행렬을 갖는다.

x축 회전

$\theta$만큼 x축을 기준으로 회전하는 변환은 다음과 같다:

Rx(θ)=[10000cosθsinθ00sinθcosθ00001]\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}

y축 회전

$\theta$만큼 y축을 기준으로 회전하는 변환은 다음과 같다:

Ry(θ)=[cosθ0sinθ00100sinθ0cosθ00001]\mathbf{R}_y(\theta) = \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축 회전

$\theta$만큼 z축을 기준으로 회전하는 변환은 다음과 같다:

Rz(θ)=[cosθsinθ00sinθcosθ0000100001]\mathbf{R}_z(\theta) = \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{p}$를 x축 기준 $\theta$만큼 회전시키려면:

p=Rx(θ)p\mathbf{p}' = \mathbf{R}_x(\theta) \mathbf{p}

확대/축소 변환

확대/축소 변환은 각 축을 기준으로 크기를 조절하는 변환을 말한다. 확대/축소 변환 행렬은 다음과 같다:

S=[sx0000sy0000sz00001]\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}

여기서 $s_x$, $s_y$, $s_z$는 각각 x, y, z축 방향의 확대/축소 비율이다.

축소/확대를 적용하려면 단순히 $\mathbf{S}$를 원래의 점에 곱해주면 된다:

p=Sp\mathbf{p}' = \mathbf{S} \mathbf{p}

이를 풀어서 쓰면:

[xyz1]=[sx0000sy0000sz00001][xyz1]=[sxxsyyszz1]\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} = \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} s_x x \\ s_y y \\ s_z z \\ 1 \end{bmatrix}

따라서, 확대/축소된 좌표는 $\mathbf{p}' = (s_x x, s_y y, s_z z)$가 된다.

복합 변환

복합 변환은 여러 개의 기본 변환(이동, 회전, 확대/축소)을 결합하여 하나의 변환으로 만들어낸 것이다. 이를 위해 각 변환 행렬을 곱하면 된다. 각 변환의 순서가 중요하다. 일반적으로, 변환의 순서는 다음과 같이 적용된다:

  1. 확대/축소 변환

  2. 회전 변환

  3. 이동 변환

예를 들어, 점 $\mathbf{p}$에 대해 먼저 확대/축소 $\mathbf{S}$, 그 다음 회전 $\mathbf{R}$, 마지막으로 이동 $\mathbf{T}$를 적용하려면 복합 변환 행렬은 다음과 같다:

M=TRS\mathbf{M} = \mathbf{T} \mathbf{R} \mathbf{S}

따라서, 점 $\mathbf{p}$의 최종 변환된 위치 $\mathbf{p}'$는:

p=Mp=TRSp\mathbf{p}' = \mathbf{M} \mathbf{p} = \mathbf{T} \mathbf{R} \mathbf{S} \mathbf{p}

다음은 각 기본 변환들을 복합하여 변환 행렬을 계산하는 예시이다. 예를 들어, 먼저 x축으로 2배 확대, z축으로 45도 회전, 마지막으로 (5, 5, 0)만큼 이동시키는 변환을 복합하면:

  1. 확대/축소 변환 행렬 $\mathbf{S}$:

S=[2000010000100001]\mathbf{S} = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
  1. z축 회전 변환 행렬 $\mathbf{R}_z (45^\circ)$:

Rz=[cos45sin4500sin45cos450000100001]=[22220022220000100001]\mathbf{R}_z = \begin{bmatrix} \cos{45^\circ} & -\sin{45^\circ} & 0 & 0 \\ \sin{45^\circ} & \cos{45^\circ} & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
  1. 이동 변환 행렬 $\mathbf{T}$:

T=[1005010500100001]\mathbf{T} = \begin{bmatrix} 1 & 0 & 0 & 5 \\ 0 & 1 & 0 & 5 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

각 변환 행렬을 각각 순서대로 곱하면 복합 변환 행렬 $\mathbf{M}$은 다음과 같다:

M=TRzS\mathbf{M} = \mathbf{T} \mathbf{R}_z \mathbf{S}
=[1005010500100001][22220022220000100001][2000010000100001]= \begin{bmatrix} 1 & 0 & 0 & 5 \\ 0 & 1 & 0 & 5 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

이를 계산하면 최종 복합 변환 행렬 $\mathbf{M}$을 얻을 수 있다.

이제 해당 복합 변환 행렬을 원래의 점 $\mathbf{p}$에 적용하면 최종 변환된 좌표를 구할 수 있다.

Last updated