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

2D 스케일링 변환

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

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

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

\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' = s_x x, \quad y' = s_y y

3D 스케일링 변환

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

\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}로 변환하기 위한 수식은 다음과 같다:

\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' = s_x x, \quad y' = s_y y, \quad z' = s_z z

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

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

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

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

\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}로 변환하기 위한 수식은 다음과 같다:

\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 동차 좌표계에서 변환 행렬은 다음과 같다:

\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}로 변환하기 위한 수식은 다음과 같다:

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