스케일링 변환의 목적은 객체의 크기를 변경하는 데 있다. 이 변환은 객체의 중심을 기준으로 객체의 크기를 일괄적으로 조정한다. 스케일링 변환은 2D와 3D 모두에서 유사한 방식으로 처리된다.
2D 스케일링 변환
2D 공간에서 객체를 스케일링하기 위해서는 객체의 각 점의 (x, y) 좌표를 새로운 좌표 (x', y')로 변환해야 한다. 이 변환은 다음과 같은 행렬을 이용하여 수행될 수 있다:
여기서 s_x와 s_y는 각각 x 축과 y 축 방향의 스케일링 인자이다. 이 스케일링 행렬을 이용하여 입력 점 \mathbf{p} = \begin{bmatrix} x \\ y \end{bmatrix}를 변환된 점 \mathbf{p}' = \begin{bmatrix} x' \\ y' \end{bmatrix}로 변환할 수 있다:
따라서, 스케일링 변환 후의 새로운 좌표는 다음과 같이 계산된다:
3D 스케일링 변환
3D 공간에서는 스케일링 변환이 각 축에 대해 독립적으로 일어난다. 3D 스케일링 변환 행렬은 다음과 같다:
여기서 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}로 변환하기 위한 수식은 다음과 같다:
따라서, 변환 후의 새로운 좌표는 다음과 같이 계산된다:
동차 좌표계를 사용한 스케일링 변환
동차 좌표계를 사용하면 스케일링 변환을 더욱 효율적으로 처리할 수 있다.
2D 동차 좌표계를 사용한 스케일링 변환
2D 동차 좌표계에서 변환 행렬은 다음과 같다:
동차 좌표로 표현된 입력 점 \mathbf{p}^{h} = \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}를 변환된 점 \mathbf{p'}^{h} = \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix}로 변환하기 위한 수식은 다음과 같다:
3D 동차 좌표계를 사용한 스케일링 변환
3D 동차 좌표계에서 변환 행렬은 다음과 같다:
표현된 입력 점 \mathbf{p}^{h} = \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}를 변환된 점 \mathbf{p'}^{h} = \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix}로 변환하기 위한 수식은 다음과 같다:
이와 같이 동차 좌표계를 사용하면 스케일링 변환을 간단히 행렬곱을 통해 수행할 수 있다.
스케일링의 특징 및 주의점
스케일링 변환을 적용할 때 몇 가지 중요한 특징과 주의점을 살펴보아야 한다:
- 비례 스케일링(setproportionate scaling): s_x, s_y, s_z의 값이 같으면 모든 축에 대해 비례적으로 크기가 변한다.
- 비비례 스케일링(non-uniform scaling): 각 축에 대해 다른 값을 사용하면 비비례적으로 크기가 변한다.
- 부호: 스케일링 인자가 음수일 경우 해당 축 방향으로 대칭 변환이 발생한다.
- 중심 축 문제: 스케일링 중심이 변환되지 않는 한, 객체의 중심이 원점에 위치하지 않으면 비례의 왜곡이 일어날 수 있다. 이를 해결하기 위해서는 이후에 변환된 객체를 다시 적절한 위치로 이동시키는 추가적인 변환이 필요할 수 있다.