선형 대수학(Linear Algebra)은 벡터(vector)와 행렬(matrix)을 다루는 학문으로, 동차좌표계(Homogeneous Coordinate System)를 이해하는 데 매우 중요한 역할을 한다. 동차좌표계를 사용하게 되면 유사한 점의 표현 방식이나 변환을 더 쉽게 처리할 수 있다. 이를 이해하기 위해서는 먼저 선형 대수학의 기본 개념들을 이해할 필요가 있다.
벡터는 크기와 방향을 가진 객체이다. 일반적으로 벡터는 $\mathbf{v}$로 표현되며, 다음과 같은 형태를 가질 수 있다.
v = [ v 1 v 2 ⋮ v n ] \mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} v = v 1 v 2 ⋮ v n 벡터 공간은 이러한 벡터들이 정의된 공간이다. 벡터 공간은 두 주요 연산, 벡터 덧셈과 스칼라 곱셈에 대해 닫혀 있어야 한다.
행렬은 수를 직사각형 배열로 정렬한 것이라고 할 수 있다. 행렬은 벡터 공간의 변환 및 여러 선형 대수학 연산을 수행할 때 중요한 역할을 한다.
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} A = a 11 a 21 ⋮ a m 1 a 12 a 22 ⋮ a m 2 ⋯ ⋯ ⋱ ⋯ a 1 n a 2 n ⋮ a mn 선형 변환은 벡터 공간을 다른 벡터 공간에 매핑하는 함수이다. 예를 들어, 행렬 $\mathbf{A}$와 벡터 $\mathbf{x}$를 통해 선형 변환을 정의할 수 있다.
y = A x \mathbf{y} = \mathbf{A} \mathbf{x} y = Ax 이는 벡터 $\mathbf{x}$에 행렬 $\mathbf{A}$를 곱하여 새로운 벡터 $\mathbf{y}$를 얻는 것을 의미한다.
3차원 동차좌표와 3D 변환
3D 변환에서는 동차 좌표계를 4차원으로 확장한다. 예를 들어, 3D 좌표 $(x, y, z)$를 동차 좌표계로 확장하면 $(x, y, z, 1)$이 된다. 이렇게 하면 3D 변환, 특히 3D 평행 이동, 회전, 스케일링 등을 일관되게 처리할 수 있다.
3D 평행이동은 다음과 같은 행렬로 표현할 수 있다:
T = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] \mathbf{T} = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} T = 1 0 0 0 0 1 0 0 0 0 1 0 t x t y t z 1 따라서, 좌표 $(x, y, z)$를 $(x + t_x, y + t_y, z + t_z)$로 평행 이동하는 것은 다음과 같은 행렬 곱셈으로 표현할 수 있다.
P ′ = T P = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ x y z 1 ] = [ x + t x y + t y z + t z 1 ] \mathbf{P}' = \mathbf{T} \mathbf{P} = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x + t_x \\ y + t_y \\ z + t_z \\ 1 \end{bmatrix} P ′ = TP = 1 0 0 0 0 1 0 0 0 0 1 0 t x t y t z 1 x y z 1 = x + t x y + t y z + t z 1 3D 회전은 X축, Y축, Z축에 대한 회전을 포함한다. 각각의 회전 행렬은 다음과 같다.
R x ( θ ) = [ 1 0 0 0 0 cos θ − sin θ 0 0 sin θ cos θ 0 0 0 0 1 ] \mathbf{R}_x(\theta) = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta & 0 \\ 0 & \sin\theta & \cos\theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} R x ( θ ) = 1 0 0 0 0 cos θ sin θ 0 0 − sin θ cos θ 0 0 0 0 1 R y ( θ ) = [ cos θ 0 sin θ 0 0 1 0 0 − sin θ 0 cos θ 0 0 0 0 1 ] \mathbf{R}_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta & 0 \\ 0 & 1 & 0 & 0 \\ -\sin\theta & 0 & \cos\theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} R y ( θ ) = cos θ 0 − sin θ 0 0 1 0 0 sin θ 0 cos θ 0 0 0 0 1 R z ( θ ) = [ cos θ − sin θ 0 0 sin θ cos θ 0 0 0 0 1 0 0 0 0 1 ] \mathbf{R}_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} R z ( θ ) = cos θ sin θ 0 0 − sin θ cos θ 0 0 0 0 1 0 0 0 0 1 스케일링 변환은 다음과 같은 행렬로 표현된다. 이 행렬은 각 축에 대해 독립적으로 크기를 변경할 수 있다.
S = [ s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 ] \mathbf{S} = \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} S = s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 동차 좌표계의 가장 큰 장점은 다양한 기하 변환을 일관되게 처리할 수 있다는 점이다. 행렬 연산만으로 변환을 수행할 수 있기 때문에, 연산이 단순하고 빠르다. 또한, 여러 변환을 하나의 변환으로 결합하여 표현할 수 있어 효율적이다.
결국, 이러한 특성들 때문에 동차 좌표계는 컴퓨터 그래픽스, 로보틱스, CAD(Computer-Aided Design) 등 다양한 분야에서 널리 사용된다.