Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

s-nova 님의 블로그

3. 행렬 본문

게임수학

3. 행렬

s-nova 2025. 12. 2. 15:15

'이득우의 게임수학' 도서를 바탕으로 공부한 내용을 작성한 글입니다.


 

 

1. 선형성

선형성$^{\text{Linearity}}$가법성$^{\text{Additivity}}$1차 동차성$^{\text{Homogeneity of Degree 1}}$ 두 가지 조건을 모두 만족하는 함수의 성질입니다.

 

1-1. 가법성

함수에 두 입력의 합을 넣은 결과가, 각각을 넣은 결과의 합과 같아야 합니다.

$$f(x_1 + x_2) = f(x_1) + f(x_2)$$

 

1-2. 1차 동차성

입력에 스칼라를 곱한 후 함수에 넣은 결과가, 함수 결과에 스칼라를 곱한 것과 같아야 합니다.

$$f(kx) = k f(x)$$

 

💡 예시: $f(x) = 2x$는 선형 함수입니다. 반면 $f(x) = x + 1$은 가법성을 만족하지 않으므로 $($f(1+1) = 3이지만 f(1) + f(1) = 4$)$ 선형 함수가 아닙니다.

 

 

2. 변환과 선형 변환

변환$^{\text{Transformation}}$은 두 벡터 공간이 동일한 구조를 지닐 때, 두 공간의 대응 관계를 의미합니다.

그 중에서 선형성을 유지시켜주는 함수를 선형 변환$^{\text{Linear Transformation}}$이라고 합니다.

 

예를 들어, 다음 함수는 선형 변환입니다:

$$f(x, y) = (ax + by, cx + dy)$$

여기서 $a, b, c, d$는 상수입니다.

 

🎮 게임에서의 활용: 게임 오브젝트의 회전, 크기 조절, 기울이기 등은 모두 선형 변환입니다. 이들은 원점을 유지하고 직선을 직선으로 변환합니다.

 

 

3. 행렬의 기초

행렬$^{\text{Matrix}}$은 수를 사각형의 형태로 행과 열을 맞춰 배열한 테이블입니다.

 

3-1. 벡터의 행렬 표현

벡터는 한 줄로 구성된 행렬로 표현됩니다.

$$A = \begin{bmatrix} x \\ y \end{bmatrix} \quad \text{(열벡터)}$$

$$B = \begin{bmatrix} x & y \end{bmatrix} \quad \text{(행벡터)}$$

 

3-2. 정방행렬

선형 변환을 표현할 때는 행과 열의 크기가 같은 정방행렬$^{\text{Square Matrix}}$을 사용합니다.

 

앞서 본 선형 변환 $f(x, y) = (ax + by, cx + dy)$는 2×2 정방행렬로 표현됩니다:

$$A = \begin{bmatrix} a & b \\ c & d \end{bmatrix}$$

 

3-3. 행렬 곱셈

선형 변환은 행렬 곱으로 표현됩니다:

$$f(x, y) = A \cdot \vec{v} = \begin{bmatrix} a & b \\ c & d \end{bmatrix} \cdot \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} ax + by \\ cx + dy \end{bmatrix}$$

 

3-4. 결합법칙을 통한 최적화

행렬 곱의 결합법칙을 이용하면 연산량을 크게 줄일 수 있습니다.

 

예시: 100개의 점에 5번의 선형 변환을 적용하는 경우

 

방법 수식 연산 횟수
비효율적 $E \cdot D \cdot C \cdot B \cdot A \cdot \vec{v}$ $($100번 반복$)$ 500번
효율적 $F = E \cdot D \cdot C \cdot B \cdot A$ 계산 후
$F \cdot \vec{v}$ $($100번 반복$)$
104번

 

⚡ 최적화 팁: 게임 엔진에서는 여러 변환을 하나의 행렬로 미리 합성한 후 $($월드 변환 행렬$)$, 이를 각 정점에 적용합니다. 이것이 Transform Hierarchy의 핵심 원리입니다.

 

 

4. 주요 변환 행렬

4-1. 크기 변환 행렬

크기 변환 행렬$^{\text{Scale Transformation Matrix}}$은 x축 방향으로 $a$배, y축 방향으로 $b$배 확대/축소합니다.

$$S = \begin{bmatrix} a & 0 \\ 0 & b \end{bmatrix}$$

 

// Unity 예시
transform.localScale = new Vector3(2.0f, 3.0f, 1.0f);  // x축 2배, y축 3배

 

4-2. 회전 변환 행렬

회전 변환 행렬$^{\text{Rotation Transformation Matrix}}$은 원점을 중심으로 반시계방향으로 $\theta$만큼 회전시킵니다.

$$R_{\theta} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}$$

 

// C++로 2D 회전 행렬 구현
struct Matrix2x2
{
    float m[2][2];
    
    static Matrix2x2 Rotation(float theta)
    {
        float c = std::cos(theta);
        float s = std::sin(theta);
        
        return Matrix2x2
        {
            c, -s,
            s,  c
        };
    }
    
    Vector2 operator*(const Vector2& v) const
    {
        return Vector2
        {
            m[0][0] * v.x + m[0][1] * v.y,
            m[1][0] * v.x + m[1][1] * v.y
        };
    }
};

 

4-3. 전단 변환 행렬

전단 변환 행렬$^{\text{Shear Transformation Matrix}}$은 한 축 방향으로 밀어서 기울이는 변환입니다.

x축 방향으로 $a$만큼 미는 전단 변환:

$$S = \begin{bmatrix} 1 & a \\ 0 & 1 \end{bmatrix}$$

 

📌 활용 예시: 전단 변환은 이탤릭체 글꼴 효과나 원근감을 표현하는 데 사용됩니다.

 

 

5. 역행렬

5-1. 항등행렬

항등행렬$^{\text{Identity Matrix}}$은 원 공간의 변화 없이 동일한 공간으로 유지되는 변환입니다.

$$I = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}$$

임의의 행렬 $A$에 대해 $A \cdot I = I \cdot A = A$가 성립합니다.

 

5-2. 역행렬의 정의

역행렬$^{\text{Inverse Matrix}}$은 행렬 곱의 결과가 항등행렬이 나오는 특별한 행렬입니다.

$$A \cdot A^{-1} = A^{-1} \cdot A = I$$

 

🎮 게임 활용: 월드 좌표를 로컬 좌표로 변환하거나, 카메라 변환의 역을 구할 때 역행렬을 사용합니다.

 

5-3. 행렬식

행렬식$^{\text{Determinant}}$은 역행렬이 존재하는지 파악할 수 있는 수식으로, $\det(A)$ 또는 $|A|$로 표시합니다.

 

2×2 정방행렬의 행렬식:

$$A = \begin{bmatrix} a & b \\ c & d \end{bmatrix}$$

$$\det(A) = ad - bc$$

 

행렬식이 0이 아니면 역행렬이 존재하고, 0이면 역행렬이 존재하지 않습니다.

 

 

6. 주요 변환 행렬의 역행렬

6-1. 크기 변환 행렬의 역행렬

$$S = \begin{bmatrix} a & 0 \\ 0 & b \end{bmatrix}$$

$$S^{-1} = \begin{bmatrix} \frac{1}{a} & 0 \\ 0 & \frac{1}{b} \end{bmatrix}$$

확대한 만큼 축소하면 원래대로 돌아옵니다.

 

6-2. 전단 변환 행렬의 역행렬

$$S = \begin{bmatrix} 1 & a \\ 0 & 1 \end{bmatrix}$$

$$S^{-1} = \begin{bmatrix} 1 & -a \\ 0 & 1 \end{bmatrix}$$

오른쪽으로 민 만큼 왼쪽으로 밀면 원래대로 돌아옵니다.

 

6-3. 회전 변환 행렬의 역행렬

$$R_{\theta} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}$$

$$R_{\theta}^{-1} = R_{-\theta} = R_{\theta}^T = \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix}$$

 

회전 행렬의 역행렬은 세 가지 특징이 있습니다:

  • 반대 방향으로 회전: $R_{-\theta}$
  • 전치 행렬$^{\text{Transpose}}$과 동일: $R_{\theta}^T$ $($행과 열을 바꿈$)$
  • 회전 행렬은 직교 행렬$^{\text{Orthogonal Matrix}}$

 

6-4. 행렬 곱의 역행렬

여러 변환을 합성한 행렬의 역행렬은 순서를 뒤집어서 각각의 역행렬을 곱합니다.

$$(A \cdot B)^{-1} = B^{-1} \cdot A^{-1}$$

 

// 예시: 확대 → 회전 변환의 역은 회전 역 → 축소
Matrix transform = scale * rotation;
Matrix inverse = rotation.Inverse() * scale.Inverse();

 

 

7. 정리

이번 포스트에서는 선형 변환과 행렬에 대해 학습했습니다.

 

  • 선형성: 가법성과 1차 동차성을 만족하는 성질
  • 행렬: 선형 변환을 표현하는 수학적 도구
  • 주요 변환: 크기, 회전, 전단 변환 행렬
  • 역행렬: 변환을 되돌리는 행렬
  • 최적화: 행렬 곱의 결합법칙으로 연산량 감소

 

'게임수학' 카테고리의 다른 글

5. 내적  (0) 2025.12.02
4. 아핀 공간  (0) 2025.12.02
2. 삼각함수  (0) 2025.12.02
1. 벡터  (0) 2025.12.01
0. 들어가기  (0) 2025.11.30