2D 및 3D 스케일링 변환

스케일링 변환의 목적은 객체의 크기를 변경하는 데 있다. 이 변환은 객체의 중심을 기준으로 객체의 크기를 일괄적으로 조정한다. 스케일링 변환은 2D와 3D 모두에서 유사한 방식으로 처리된다.

2D 스케일링 변환

2D 공간에서 객체를 스케일링하기 위해서는 객체의 각 점의 $(x, y)$ 좌표를 새로운 좌표 $(x', y')$로 변환해야 한다. 이 변환은 다음과 같은 행렬을 이용하여 수행될 수 있다:

S2D=[sx00sy]\mathbf{S}_{2D} = \begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix}

여기서 $s_x$와 $s_y$는 각각 $x$ 축과 $y$ 축 방향의 스케일링 인자이다. 이 스케일링 행렬을 이용하여 입력 점 $\mathbf{p} = \begin{bmatrix} x \ y \end{bmatrix}$를 변환된 점 $\mathbf{p}' = \begin{bmatrix} x' \ y' \end{bmatrix}$로 변환할 수 있다:

p=S2Dp=[sx00sy][xy]=[sxxsyy]\mathbf{p}' = \mathbf{S}_{2D} \mathbf{p} = \begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} s_x x \\ s_y y \end{bmatrix}

따라서, 스케일링 변환 후의 새로운 좌표는 다음과 같이 계산된다:

x=sxx,y=syyx' = s_x x, \quad y' = s_y y

3D 스케일링 변환

3D 공간에서는 스케일링 변환이 각 축에 대해 독립적으로 일어난다. 3D 스케일링 변환 행렬은 다음과 같다:

S3D=[sx000sy000sz]\mathbf{S}_{3D} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & s_z \end{bmatrix}

여기서 $s_x$, $s_y$, $s_z$는 각각 $x$, $y$, $z$ 축 방향의 스케일링 인자이다. 입력 점 $\mathbf{p} = \begin{bmatrix} x \ y \ z \end{bmatrix}$를 변환된 점 $\mathbf{p}' = \begin{bmatrix} x' \ y' \ z' \end{bmatrix}$로 변환하기 위한 수식은 다음과 같다:

p=S3Dp=[sx000sy000sz][xyz]=[sxxsyyszz]\mathbf{p}' = \mathbf{S}_{3D} \mathbf{p} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & s_z \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} s_x x \\ s_y y \\ s_z z \end{bmatrix}

따라서, 변환 후의 새로운 좌표는 다음과 같이 계산된다:

x=sxx,y=syy,z=szzx' = s_x x, \quad y' = s_y y, \quad z' = s_z z

동차 좌표계를 사용한 스케일링 변환

동차 좌표계를 사용하면 스케일링 변환을 더욱 효율적으로 처리할 수 있다.

2D 동차 좌표계를 사용한 스케일링 변환

2D 동차 좌표계에서 변환 행렬은 다음과 같다:

S2Dh=[sx000sy0001]\mathbf{S}_{2D}^{h} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix}

동차 좌표로 표현된 입력 점 $\mathbf{p}^{h} = \begin{bmatrix} x \ y \ 1 \end{bmatrix}$를 변환된 점 $\mathbf{p'}^{h} = \begin{bmatrix} x' \ y' \ 1 \end{bmatrix}$로 변환하기 위한 수식은 다음과 같다:

ph=S2Dhph=[sx000sy0001][xy1]=[sxxsyy1]\mathbf{p'}^{h} = \mathbf{S}_{2D}^{h} \mathbf{p}^{h} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} s_x x \\ s_y y \\ 1 \end{bmatrix}

3D 동차 좌표계를 사용한 스케일링 변환

3D 동차 좌표계에서 변환 행렬은 다음과 같다:

S3Dh=[sx0000sy0000sz00001]\mathbf{S}_{3D}^{h} = \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

표현된 입력 점 $\mathbf{p}^{h} = \begin{bmatrix} x \ y \ z \ 1 \end{bmatrix}$를 변환된 점 $\mathbf{p'}^{h} = \begin{bmatrix} x' \ y' \ z' \ 1 \end{bmatrix}$로 변환하기 위한 수식은 다음과 같다:

ph=S3Dhph=[sx0000sy0000sz00001][xyz1]=[sxxsyyszz1]\mathbf{p'}^{h} = \mathbf{S}_{3D}^{h} \mathbf{p}^{h} = \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}

이와 같이 동차 좌표계를 사용하면 스케일링 변환을 간단히 행렬곱을 통해 수행할 수 있다.

스케일링의 특징 및 주의점

스케일링 변환을 적용할 때 몇 가지 중요한 특징과 주의점을 살펴보아야 한다:

  1. 비례 스케일링(setproportionate scaling): $s_x$, $s_y$, $s_z$의 값이 같으면 모든 축에 대해 비례적으로 크기가 변한다.

  2. 비비례 스케일링(non-uniform scaling): 각 축에 대해 다른 값을 사용하면 비비례적으로 크기가 변한다.

  3. 부호: 스케일링 인자가 음수일 경우 해당 축 방향으로 대칭 변환이 발생한다.

  4. 중심 축 문제: 스케일링 중심이 변환되지 않는 한, 객체의 중심이 원점에 위치하지 않으면 비례의 왜곡이 일어날 수 있다. 이를 해결하기 위해서는 이후에 변환된 객체를 다시 적절한 위치로 이동시키는 추가적인 변환이 필요할 수 있다.

Last updated