예제: 3차원 그래픽 변환
3차원 변환의 기본 개념
3차원 공간에서 객체의 변환은 위치, 크기, 방향 등을 변경하여 객체를 원하는 형태로 만드는 과정을 의미한다. 3차원 변환에는 여러 유형이 있으며, 각각 고유한 행렬 연산을 통해 수행된다. 이 예제에서는 변환의 기본 개념을 다루고, 각 변환을 수학적으로 표현하고 이를 사용하여 그래픽 객체를 변환하는 방법을 살펴본다.
평행 이동 (Translation)
평행 이동은 객체를 일정한 거리만큼 이동시키는 변환이다. 수학적으로 평행 이동은 다음과 같이 표현된다:
객체의 위치를 나타내는 3차원 벡터 $\mathbf{v} = \begin{bmatrix} x \ y \ z \end{bmatrix}$가 있을 때, 원하는 평행 이동 벡터를 $\mathbf{t} = \begin{bmatrix} t_x \ t_y \ t_z \end{bmatrix}$로 나타내면, 평행 이동된 벡터 $\mathbf{v'}$는 다음과 같이 구할 수 있다:
동차좌표계에서는 평행 이동을 4x4 행렬로 나타낼 수 있다:
이 행렬을 사용하여 새로운 위치를 구하는 동차 좌표 변환식은 다음과 같다:
회전 (Rotation)
회전 변환은 객체를 주어진 축을 중심으로 일정 각도만큼 회전시키는 변환이다. 회전 변환은 주로 x, y, z 축을 중심으로 한 회전으로 구분된다. 각 축을 중심으로 한 회전 행렬은 다음과 같다:
x축을 중심으로 한 회전:
y축을 중심으로 한 회전:
z축을 중심으로 한 회전:
위의 회전 행렬을 이용하여 객체를 회전시킬 수 있다. 예를 들어, 벡터 $\mathbf{v_h} = \begin{bmatrix} x \ y \ z \ 1 \end{bmatrix}$를 $\theta$ 라디안만큼 x축을 중심으로 회전시키면, 다음과 같은 결과를 얻는다:
스케일링 (Scaling)
스케일링은 객체의 크기를 변경하는 변환이다. 스케일링 행렬을 $\mathbf{S}$로 나타낸다. $\mathbf{S}$는 다음과 같은 4x4 행렬로 표현된다:
여기서 $s_x$, $s_y$, $s_z$는 각각 x, y, z축에 대한 스케일 계수이다. 객체의 크기를 변경하려면 벡터 $\mathbf{v_h}$에 스케일링 행렬 $\mathbf{S}$를 곱하면 된다:
복합 변환 (Composite Transformation)
복합 변환은 여러 개의 기본 변환을 연이어 수행하여 객체를 원하는 형태로 만드는 것이다. 복합 변환의 핵심은 변환 행렬을 순서대로 곱하여 하나의 복합 행렬을 만든 후 이를 객체에 적용하는 것이다.
예를 들어, 객체를 먼저 평행 이동시키고, 회전한 뒤 스케일링하는 경우를 생각해 봅시다. 각 변환의 행렬을 차례로 곱하면 된다. 평행 이동 행렬 $\mathbf{T}$, 회전 행렬 $\mathbf{R}$, 스케일링 행렬 $\mathbf{S}$가 주어졌을 때, 복합 변환 행렬 $\mathbf{C}$는 다음과 같이 구할 수 있다:
복합 변환 행렬을 구한 후, 이를 객체의 동차 좌표 벡터 $\mathbf{v_h}$에 곱하여 변환된 객체를 얻는다:
예제: 2D 평행 이동
2차원 평행이동은 객체를 평면에서 이동시키는 변환으로, 각각의 점을 $\Delta x$와 $\Delta y$만큼 이동시키는 것이다. 2차원 평행이동의 수학적 표현은 다음과 같다:
점 $\mathbf{p} = \begin{bmatrix} x \ y \end{bmatrix}$이 있을 때, 평행이동 벡터 $\mathbf{t} = \begin{bmatrix} t_x \ t_y \end{bmatrix}$만큼 이동된 새로운 점 $\mathbf{p'}$는 다음과 같이 나타낼 수 있다:
동차좌표계에서는 평행이동을 다음과 같이 3x3 행렬로 나타낼 수 있다:
이를 사용하여 점 $\mathbf{p}_h = \begin{bmatrix} x \ y \ 1 \end{bmatrix}$을 변환된 점 $\mathbf{p'}$로 표현하면:
예제: 2D 회전
2차원 평면에서 회전 변환은 원점을 중심으로 점을 $\theta$만큼 회전시키는 것이다. 회전 행렬은 다음과 같이 나타낼 수 있다:
점 $\mathbf{p_h} = \begin{bmatrix} x \ y \ 1 \end{bmatrix}$을 $\theta$만큼 회전시키면 변환된 점 $\mathbf{p'}$는 다음과 같다:
예제: 2D 스케일링
2차원 스케일링은 점을 원점으로부터 일정 비율로 확장하거나 축소하는 변환이다. 스케일링 행렬은 다음과 같이 나타낼 수 있다:
여기서 $s_x$와 $s_y$는 각각 x축과 y축에 대한 스케일 계수이다. 점 $\mathbf{p}_h = \begin{bmatrix} x \ y \ 1 \end{bmatrix}$에 스케일링 행렬을 적용하여 변환된 점 $\mathbf{p'}$를 구하면 다음과 같다:
예제: 2D 복합 변환
2차원 복합 변환은 여러 개의 기본 변환을 순서대로 적용하는 과정이다. 평행이동, 회전, 스케일링의 순서로 구성된 복합 변환을 예로 들어보겠다.
모든 변환 행렬이 다음과 같이 주어졌다고 가정한다:
평행 이동: $\mathbf{T} = \begin{bmatrix} 1 & 0 & t_x \ 0 & 1 & t_y \ 0 & 0 & 1 \end{bmatrix}$
회전: $\mathbf{R} = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \ \sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \end{bmatrix}$
스케일링: $\mathbf{S} = \begin{bmatrix} s_x & 0 & 0 \ 0 & s_y & 0 \ 0 & 0 & 1 \end{bmatrix}$
복합 변환 행렬 $\mathbf{C}$를 구하려면 각 변환 행렬을 순서대로 곱하면 된다:
최종 변환된 점 $\mathbf{p'}$는 다음과 같다:
이와 같은 방식으로 다양한 복합 변환을 수행하여 원하는 객체의 이동, 회전, 크기 변화를 표현할 수 있다.
Last updated