회전 행렬
회전 행렬은 2D 또는 3D 공간에서 점들을 회전시키기 위해 사용되는 행렬이다. 이 행렬은 점의 좌표를 특정 각도만큼 회전시키는 변환을 가능하게 한다.
2D 회전 행렬
2차원 공간에서 원점을 기준으로 점을 \theta만큼 회전시키는 행렬은 다음과 같다:
\mathbf{R}(\theta) =
\begin{bmatrix}
\cos\theta & -\sin\theta \\
\sin\theta & \cos\theta
\end{bmatrix}
2D 벡터 \mathbf{x}에 위의 회전 행렬을 곱하면, 벡터 \mathbf{x}는 \theta만큼 회전된다:
\mathbf{x'} = \mathbf{R}(\theta) \mathbf{x}
여기서,
\mathbf{x} =
\begin{bmatrix}
x \\
y
\end{bmatrix}
,
\mathbf{x'} =
\begin{bmatrix}
x' \\
y'
\end{bmatrix}
회전 후의 좌표 (x', y')는 다음과 같다:
\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
\cos\theta & -\sin\theta \\
\sin\theta & \cos\theta
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
동차좌표계
동차좌표는 그래픽 변환에서 사용되는 좌표 시스템으로, 2D 변환을 3D 벡터와 행렬 연산으로 표현할 수 있게 한다. 이는 변환 연산 (회전, 평행이동, 스케일링 등)을 단일 행렬 곱으로 통합할 수 있게 한다.
2D 동차좌표계
2D 동차좌표는 2D 좌표 (x, y)를 3D 좌표 (x, y, 1)로 확장한 것이다:
\mathbf{\hat{x}} =
\begin{bmatrix}
x \\
y \\
1
\end{bmatrix}
동차변환 행렬
동차변환 행렬은 원래의 2D 변환 행렬을 3D 행렬로 확장한 것이다. 예를 들어, 2D 회전 행렬 \mathbf{R}(\theta)을 동차좌표계로 표현하면:
\mathbf{T}(\theta) =
\begin{bmatrix}
\cos\theta & -\sin\theta & 0 \\
\sin\theta & \cos\theta & 0 \\
0 & 0 & 1
\end{bmatrix}
동차좌표 \mathbf{\hat{x}}에 위의 동차변환 행렬을 곱하면 동차좌표 \mathbf{\hat{x'}}는 다음과 같다:
\mathbf{\hat{x'}} = \mathbf{T}(\theta) \mathbf{\hat{x}}
이를 통해 회전 변환을 포함한 다양한 변환을 보다 효율적으로 계산할 수 있다. 동차좌표를 사용하면 회전과 평행이동을 동시에 적용할 수 있다.
예를 들어, 평행이동 행렬 \mathbf{T}(t_x, t_y)는 다음과 같다:
\mathbf{T}(t_x, t_y) =
\begin{bmatrix}
1 & 0 & t_x \\
0 & 1 & t_y \\
0 & 0 & 1
\end{bmatrix}
평행이동 후의 동차좌표 \mathbf{\hat{x'}}는 다음과 같다:
\mathbf{\hat{x'}} = \mathbf{T}(t_x, t_y) \mathbf{\hat{x}}
이 동차좌표계를 이용하면 여러 변환을 하나의 행렬 곱으로 연쇄적으로 적용할 수 있다. 예를 들어, 점을 회전시키고 이동시키려면 다음과 같은 결합 변환 행렬을 사용할 수 있다:
\mathbf{T}_\text{combined} = \mathbf{T}(t_x, t_y) \mathbf{R}(\theta)
따라서 변환 후의 점 \mathbf{\hat{x'}}는 다음과 같이 계산할 수 있다:
\mathbf{\hat{x'}} = \mathbf{T}_\text{combined} \mathbf{\hat{x}}
이렇게 동차좌표계를 사용하면 여러 변환을 간단하고 일관성 있게 적용할 수 있다.
3D 회전 행렬과 동차좌표계
3차원 공간에서 회전 행렬은 특정 축을 기준으로 회전시키는 행렬이다. 세 가지 주요 회전축(x, y, z)에 대한 회전 행렬은 다음과 같다:
\mathbf{R}_x(\theta) =
\begin{bmatrix}
1 & 0 & 0 \\
0 & \cos\theta & -\sin\theta \\
0 & \sin\theta & \cos\theta
\end{bmatrix}
\mathbf{R}_y(\theta) =
\begin{bmatrix}
\cos\theta & 0 & \sin\theta \\
0 & 1 & 0 \\
-\sin\theta & 0 & \cos\theta
\end{bmatrix}
\mathbf{R}_z(\theta) =
\begin{bmatrix}
\cos\theta & -\sin\theta & 0 \\
\sin\theta & \cos\theta & 0 \\
0 & 0 & 1
\end{bmatrix}
3D 동차좌표계
3D 동차좌표는 3D 좌표 (x, y, z)를 4D 좌표 (x, y, z, 1)로 확장한 것이다:
\mathbf{\hat{x}} =
\begin{bmatrix}
x \\
y \\
z \\
1
\end{bmatrix}
3D 동차변환 행렬
동차변환 행렬은 원래의 3D 변환 행렬을 4x4 행렬로 확장한 것이다. 예를 들어, 3D 회전 행렬 \mathbf{R}_z(\theta)를 동차좌표계로 표현하면:
\mathbf{T}_z(\theta) =
\begin{bmatrix}
\cos\theta & -\sin\theta & 0 & 0 \\
\sin\theta & \cos\theta & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
동차좌표 \mathbf{\hat{x}}에 위의 동차변환 행렬을 곱하면 동차좌표 \mathbf{\hat{x'}}는 다음과 같다:
\mathbf{\hat{x'}} = \mathbf{T}_z(\theta) \mathbf{\hat{x}}
이 방식으로 평행이동, 회전, 스케일링 등과 같은 다양한 3D 변환을 간단한 행렬 곱셈으로 처리할 수 있다.