3차원 공간에서의 표현

3차원 동차좌표계에서는 좌표 $\mathbf{p} = (x, y, z)$ 를 동차 좌표 $\mathbf{P}_h = (x, y, z, w)$ 로 표현한다. 동차좌표계의 가장 큰 장점은 기하학적 변환(회전, 이동, 스케일링 등)을 행렬 연산으로 통일되게 다룰 수 있다는 점이다.

동차좌표의 정의

3차원 공간에서의 점 $\mathbf{p}$ 를 동차 좌표계로 표현하면 다음과 같이 나타낼 수 있다:

Ph=[xyzw]\mathbf{P}_h = \begin{bmatrix} x \\ y \\ z \\ w \end{bmatrix}

여기서 $w$ 는 동차 좌표(w-좌표)로, 일반적으로 $w = 1$ 로 설정된다. 따라서, 원래의 좌표 $\mathbf{p}$ 는 $\mathbf{P}_h$ 에서 $w$ 를 나누어 얻는다:

p=[xyz]=[xwywzw]\mathbf{p} = \begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} = \begin{bmatrix} \frac{x}{w} \\ \frac{y}{w} \\ \frac{z}{w} \end{bmatrix}

변환 행렬

3차원 공간에서의 변환을 동차좌표계로 표현하기 위해서는 4x4 변환행렬을 사용한다. 변환행렬은 다음과 같은 형태를 갖는다:

T=[a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44]\mathbf{T} = \begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \end{bmatrix}

변환된 동차 좌표 $\mathbf{P}'_h$ 는 다음과 같이 계산된다:

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

이동 변환

이동 변환은 공간의 점을 일정한 벡터 $\mathbf{d} = (d_x, d_y, d_z)$ 만큼 이동시키는 변환이다. 이를 동차 좌표계로 표현하면 다음과 같다:

Ttranslation=[100dx010dy001dz0001]\mathbf{T}_\text{translation} = \begin{bmatrix} 1 & 0 & 0 & d_x \\ 0 & 1 & 0 & d_y \\ 0 & 0 & 1 & d_z \\ 0 & 0 & 0 & 1 \end{bmatrix}

회전 변환

회전 변환은 3차원 공간의 점을 주어진 축을 중심으로 회전시키는 변환이다. 각 축에 대한 회전행렬은 아래와 같다:

X축 회전

Trotation, X(θ)=[10000cosθsinθ00sinθcosθ00001]\mathbf{T}_\text{rotation, 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축 회전

Trotation, Y(θ)=[cosθ0sinθ00100sinθ0cosθ00001]\mathbf{T}_\text{rotation, 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축 회전

Trotation, Z(θ)=[cosθcosθ00sinθcosθ0000100001]\mathbf{T}_\text{rotation, Z}(\theta) = \begin{bmatrix} \cos\theta & -\cos\theta & 0 & 0 \\ \sin\theta & \cos\theta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

스케일링 변환

스케일링 변환은 점을 원점에 대한 일정 비율로 확대하거나 축소시키는 변환이다. 스케일링 행렬은 다음과 같다:

Tscaling=[sx0000sy0000sz00001]\mathbf{T}_\text{scaling} = \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축 방향의 스케일링 비율이다.

변환 행렬의 조합

여러 변환을 연속적으로 적용하려면 각 변환 행렬을 곱셈하여 하나의 변환 행렬로 결합할 수 있다. 예를 들어, 먼저 이동하고 회전한 다음 스케일링을 적용하려면 다음과 같이 행렬들을 곱셈한다:

Tcombined=TscalingTrotationTtranslation\mathbf{T}_\text{combined} = \mathbf{T}_\text{scaling} \cdot \mathbf{T}_\text{rotation} \cdot \mathbf{T}_\text{translation}

이렇게 변환 행렬을 결합하면 단 한 번의 행렬 곱셈으로 일련의 변환을 적용할 수 있다.

예제: 복합 변환

하나의 예제로 x축 방향으로 2 단위 이동, z축 회전 90도 ( $\theta = \frac{\pi}{2}$ ), 그리고 모든 축에 대해 0.5 비율로 스케일링 하는 복합 변환을 보겠다.

  1. 이동 변환:

Ttranslation=[1002010000100001]\mathbf{T}_\text{translation} = \begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
  1. 회전 변환 ( Z축 회전):

Trotation, Z(π2)=[cos(π2)sin(π2)00sin(π2)cos(π2)0000100001]=[0100100000100001]\mathbf{T}_\text{rotation, Z}\left( \frac{\pi}{2} \right) = \begin{bmatrix} \cos\left(\frac{\pi}{2}\right) & -\sin\left(\frac{\pi}{2}\right) & 0 & 0 \\ \sin\left(\frac{\pi}{2}\right) & \cos\left(\frac{\pi}{2}\right) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
  1. 스케일링 변환:

Tscaling=[0.500000.500000.500001]\mathbf{T}_\text{scaling} = \begin{bmatrix} 0.5 & 0 & 0 & 0 \\ 0 & 0.5 & 0 & 0 \\ 0 & 0 & 0.5 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
  1. 복합 변환 행렬:

Tcombined=TscalingTrotation, Z(π2)Ttranslation\mathbf{T}_\text{combined} = \mathbf{T}_\text{scaling} \cdot \mathbf{T}_\text{rotation, Z}\left( \frac{\pi}{2} \right) \cdot \mathbf{T}_\text{translation}
Tcombined=[0.500000.500000.500001][0100100000100001][1002010000100001]\mathbf{T}_\text{combined} = \begin{bmatrix} 0.5 & 0 & 0 & 0 \\ 0 & 0.5 & 0 & 0 \\ 0 & 0 & 0.5 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
Tcombined=[00.5000.5001000.500001]\mathbf{T}_\text{combined} = \begin{bmatrix} 0 & -0.5 & 0 & 0 \\ 0.5 & 0 & 0 & 1 \\ 0 & 0 & 0.5 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

이 변환 행렬을 사용하여 동차 좌표 $\mathbf{P}_{h}$에 적용하면, 해당 점에 대해 일련의 변환이 적용된다.

Last updated