Machineboy空

게임을 지탱하는 기초수학 1-7. 행렬 본문

Game/게임 수학

게임을 지탱하는 기초수학 1-7. 행렬

안녕도라 2025. 2. 26. 17:12

1. 행렬(Matrix)

행렬의 단순 정의

사각형 안에 수를 행렬과 열에 맞춰 배열한 것.

  • 복잡한 선형 변환의 식을 계산하기 편하게 단순화시킨 계산 도구
  • 선형 변환의 표현

원하는 값으로 편하게 변환하기 위해서 행렬을 쓸 것!

  • 함수로서의 행렬: 2 X 2 Matrix
  • 벡터로서의 행렬: 2 X 1 Matrix


행렬의 기본 연산들

행렬과 행렬의 덧셈 연산

행렬과 스칼라의 곱셈 연산

행렬의 전치(Transpose) 연산

행렬과 행렬의 곱셈 연산


행렬 곱셈 연산의 특징

  • 교환 법칙을 만족하지 않는다.
  • 결합 법칙은 만족한다.

 

행렬 곱의 전치 연산

  • 분배법칙을 만족한다.


2. 선형 변환과 행렬

벡터 공간의 특징을 그대로 유지하면서 선형성을 띄고, 새로운 공간으로 변환되는 과정(선형 변환)이 행렬에 대응된다.

원하는 값으로 편하게 변환하기 위해서 행렬을 쓸 것!

 

정방행렬과 열벡터의 곱셈

이의 결과는 무엇을 의미하는가?

  • 정방 행렬은 같은 차원의 공간이 서로 대응되는 선형변환을 의미한다.
  • 열벡터는 벡터 공간의 벡터를 의미한다.

즉 (x,y)를 새로운 공간의 좌표(ax + by, cx + dy)에 대응시켜주는 것


행렬을 표현하는 두 가지 방법

열기반 행렬(Column Major): OpenGL 수학에서 사용하는 기본 방식

벡터를 열으로 표현.

행기반 행렬(Row Major): DirectX 및 게임 엔진에서 사용하는 방식

벡터를 행으로 표현.

 

어떤 벡터에 선형 변환을 적용해서 새로운 벡터를 만들어냈다고 하자.

열기반과 행기반은 전치 관계일 뿐 결과는 동일함을 보장해준다.


3. 선형 변환의 시각화

  • 크기 변환
  • 밀기 변환
  • 회전 변환

원벡터 공간의 선형 변환

원 공간에 속한 임의의 벡터에 대한 조합식

선형 변환 후 변환된 기저 벡터를 조합해 벡터를 추적한다.


기저 벡터의 변환


크기 변환 행렬

직사각형을 a 만큼 가로로 늘이고,b만큼 세로로 줄이고 싶다고 할 때!

 


밀기 변환

 

원하는 변환을 위해 행렬을 설계하면 된다!

 


 

시계 방향 90도 회전 변환

물체의 모양은 그대로 간직하되 방향이 달라진 것.

반시계 방향 90도 회전 변환


임의의 각 θ에 대한 회전 변환


4. 행렬의 곱

행렬이 간편해서 쓴다기 보단, 행렬의 곱이 가진 성질을 사용하기 위해 변환에 행렬을 쓴다고 이해.

 

행렬의 곱

행렬은 하나의 선형 변환에 대응되며, 행렬의 곱은 선형 변환을 적용한 결과에 다시 선형 변환을 적용한 결과를 다음과 같이 진행된다.

두 행렬을 곱한 식(A·B)는 벡터공간 V에서 벡터공간 W로 직행하는 합성 변환을 의미하며

합성 함수의 AºB와 동일한 의미를 가진다.


삼각함수의 합 공식

 

행렬의 곱셈의 특징을 사용하면 삼각함수의 합 공식을 유도할 수 있다.


행렬의 장점

이러한 결합 법칙이 성립하는 행렬 연산의 특징은 변환이 여러 개가 존재하더라도 동일한 결과를 보장해 준다.

 

(A·B·C)· v = A · (B · (C·v))

 

앞으로 우리가 사용할 주요 선형 변환은 다음과 같다.

  • Scale(S)
  • Rotation(R)
  • Translation(T)
  • View(V)
  • Projection(P)

10만개의 벡터에 위의 다섯가지 변환을 각각 적용하면 다음과 같이 50만번의 연산이 발생한다.

 

P·(V·(T·(R·(S·v))))

 

그런데 변환이 고정되어 있다면 PVTRS를 미리 계산해 행렬을 생성한 후 이를 사용하면 동일한 결과를 만들어주는 연산은 10만번으로 해결된다

 

P·(V·(T·(R·(S·v)))) = (PVTRS) · v

 

속도에 민감한 컴퓨터 그래픽에서는 행렬을 사용할 수 밖에 없다!