[이득우 게임수학] 5. 행렬: 가상 세계의 변환 도구
- 📕 Book/이득우 게임수학
- 2023. 1. 11.
5.1 선형성: 예측 가능한 비례 관계
벡터와 스칼라 곱셈으로 생성된 벡터는 벡터와 평행한 원점을 지나는 일직선 상에 위치한다. 이러한 성질을 선형성(Linearity)이라고 한다. 선형성을 가법성(Additivity)과 1차 동차성(Homogeneity of degree1) 두 가지 조건을 모두 만족하는 함수의 성질로 정의한다.
f(x1 + x2) = f(x1) + f(x2) // 가법성
f(k · x) = k · f(x) //1차 동차성
선형 함수
원점을 지나는 다음의 직선함수를 생각해보자
f(x) = ax
y = ax
//가법성 검증
f(x1 + x2) = a(x1 + x2) //좌변
f(x1) + f(x2) = ax1 + ax2 //우변
//1차 동차성 검증
f(kx) = a(kx) //좌변
kf(x) = k(ax) //우변
다음으로 f(x) = x^2와 같은 곡선의 함수도 선형성을 만족하는지 판별해보자
f(x1 + x2) = (x1 + x2)^2 = x1^2 + x2^2 + 2x1x2 //좌변
f(x1) + f(x2) = x1^2 + x2^2 //우변
좌우변의 결과가 다르므로 선형성을 만족하지 않는다.
f(x) = ax 에 스칼라 b를 더한 f(x) = ax + b는 선형성을 만족하는지 확인해보자
f(x1 + x2) = a(x1 + x2) + b //좌변
f(x1) + f(x2) = ax1 + ax2 + 2b //우변
b만큼 차이 나게 되어 가법성을 만족하지 못한다. 선형성이란 곧게 뻗은 직선의 성질을 뜻하는 것이 아니라, 두 집합의 순수한 비(Ratio)로 구성된 1차적 대응관계를 의미한다.
벡터 공간의 선형 변환
//가법성 검증
f(v) = f(x,y) = (ax + by, cx + dy)
f(v1 + v2) = f(x1 + x2, y1 + y2)
= (a(x1 + x2) + b(y1 + y2), c(x1 + x2) + d(y1 + y2)) //좌변
f(v1) + f(v2) = (ax1 + by1, cx1 + dy1) + (ax2 + by2, cx2 + dy2)
= (ax1 + ax2 + by1 + by2, cx1 + cx2 + dy1 + dy2) //우변
∴ f(v1 + v2) = f(v1) + f(v2)
//1차 동차성 검증
kf(v) = (kax + kby, kcx + kdy) //좌변
f(kv) = (akx + bky, ckx + dky) //우변
∴ f(v1 + v2) = f(v1) + f(v2)
두 공간이 동일한 구조를 지닐 때 두 공간의 대응 관계를 변환(Transformation)이라 한다. 위처럼 선형성을 유지시켜주는 선형함수는 선형 변환(Linear transformation)이라고 한다.
5.2 행렬
행렬(Matrix)은 수를 사각형의 형태로 행과 열을 맞춰 배열한 테이블이다. n개의 행과 m개의 열로 구성된 반듯한 사각형의 형태를 띤다. 선형 변환을 표현할 때는 행과 열의 크기가 같은 정방행렬(Square matric)을 사용한다.
행렬의 기본 연산
반드시 알아야 하는 행렬의 연산은 다음 4가지다.
- 행렬과 행렬의 덧셈
- 행렬과 스칼라의 곱셈
- 행렬의 전치(Transpose of a matrix)
- 행렬과 행렬의 곱셈(행렬 곱)
//행렬과 행렬의 덧셈
A + B = ┌ a b ┐ + ┌ e f ┐ = ┌ a + e b + f ┐
└ c d ┘ └ g h ┘ └ c + g d + h ┘
//행렬과 스칼라의 곱셈
k · A = k · ┌ a b ┐ = ┌ k · a k · b ┐
└ c d ┘ └ k · c k · d ┘
//행렬의 전치
┌ a d ┐T
│ b e │ = ┌ a d c ┐
└ c f ┘ └ d e f ┘
행렬의 곱셈
행렬 곱셈은 교환법칙이 성립하지 않는다. 그러나 결합법칙은 만족한다.
//교환 법칙
A · B = ┌ a b ┐ · ┌ e f ┐ = ┌ ae + bg af + bh ┐
└ c d ┘ └ g h ┘ └ ce + dg cf + dh ┘
B · A = ┌ e f ┐ · ┌ a b ┐ = ┌ ae + cf be + df ┐
└ g h ┘ └ c d ┘ └ ag + ch bg + dh ┘
∴ A · B ≠ B · A
//결합 법칙
A · (B · C) = ┌ a b ┐ · ( ┌ e f ┐ · ┌ i j ┐ )
└ c d ┘ ( └ g h ┘ └ k l ┘ )
= ┌ a b ┐ · ┌ ei + fk ek + fl ┐
└ c d ┘ └ gi + hk gj + hl ┘
= ┌ aei + afk + bgi + bhk aej + afl + bgj + bhl ┐
└ cei + cfk + dgi + dhk cej + cfl + dgj + dhl ┘
(A · B) · C = ┌ a b ┐ · ( ┌ e f ┐ · ┌ i j ┐ )
└ c d ┘ ( └ g h ┘ └ k l ┘ )
= ┌ a b ┐ · ┌ ei + fk ek + fl ┐
└ c d ┘ └ gi + hk gj + hl ┘
= ┌ aei + afk + bgi + bhk aej + afl + bgj + bhl ┐
└ cei + cfk + dgi + dhk cej + cfl + dgj + dhl ┘
∴ (A · B) · C = A · (B · C)
다른 특징 중 하나는 행렬 곱을 전치한 결과는 순서를 바꾼 후 각각 전치해 곱한 결과와 동일 하다.
//중략
∴ (A · B)^T = B^T · A^T
정방행렬의 곱셈
B = ┌ e f ┐
└ g h ┘
A = ┌ a b ┐
└ c d ┘
v = ┌ x ┐
└ y ┘
w = ┌ e f ┐ · ┌ a b ┐ · ┌ x ┐
└ g h ┘ └ c d ┘ └ y ┘
w = B · (A · v) = (B · A) · v
5.3 행렬의 설계
원 벡터 공간 V의 벡터 v = (x,y)는 다음과 같은 표준기저 벡터의 선형 결합을 통해 생선된다.
v = (x,y) = x · (1,0) + y ·(0,1)
//선형 변환
w = x(a,c) + y(b,d) = (ax + by, cx + dy)
크기 변환행렬
크기 변환행렬(Scale transformation matrix)은 물체의 크기를 변경하는 행렬이다. (1,0)의 좌표를 갖는 e1과 (0,1)좌표를 갖는 e2의 두 표준기저벡터를 변환하면
a · (1,0) = (a,0)
b · (0,1) = (0,b)
S = ┌ a 0 ┐
└ 0 b ┘
회전 변환 행렬
각 θ로 벡터 공간을 회전시키는 회전 변환행렬(Rotation transformation matrix)을 설계해보자
- 표준기저벡터 e1을 90˚ 회전한 벡터 : (0,1)
- 표준기저벡터 e2를 90˚ 회전한 벡터 : (-1,0)
└ 1 0 ┘
- R_90˚ = R_π/2 = ┌ 0 -1 ┐
- 표준기저벡터 e1을 θ만큼 회전한 벡터 : (cosθ, sinθ)
- 표준기저벡터 e2를 θ만큼 회전한 벡터 : (-sinθ, cosθ)
└ sinθ cosθ ┘
- R_θ = ┌ cosθ -sinθ ┐
전단 변환행렬
전단 변환 행렬(Shear transformation matrix)는 e1을 고정한 상태에서 e2를 x축 방향으로 미는 경우를 뜻한다.
- e1의 변환 결과 : (1,0)
- e2의 변환 결과 : (1,1)
└ 0 1 ┘
- S = ┌ 1 1 ┐
x축으로 a만큼 밀게 된다면
S = ┌ 1 a ┐
└ 0 1 ┘
삼각함수의 덧셈 정리
cos(α + β) = cosα cosβ - sinα sinβ
sin(α + β) = sinα cosβ + cosα sinβ
R_α = ┌ cosα -sinα ┐
└ sinα cosα ┘
R_β = ┌ cosβ -sinβ ┐
└ sinβ cosβ ┘
R_(α+β) = ┌ cos(α+β) -sin(α+β) ┐
└ sin(α+β) cos(α+β) ┘
R_β · R_α = ┌ cosβ -sinβ ┐ ┌ cosα -sinα ┐
└ sinβ cosβ ┘ └ sinα cosα ┘
= ┌ cosα cosβ - sinα sinβ -(sinα cosβ + cosα sinβ) ┐
└ cosα sinβ + sinα cosβ cosα cosβ - sinα sinβ ┘
= ┌ cos(α+β) -sin(α+β) ┐
└ sin(α+β) cos(α+β) ┘
5-1 실습
하트의 크기 변환과 회전 변환을 하나의 행렬로 구현하기
5.4 역행렬
항등행렬은 원 공간의 변화없이 동일한 공간으로 유지하는 변환을 의미한다. 항등행렬은 I로 표기한다. 역행렬은 역함수와 동일하게 위 첨자 ^-1을 사용한다.
I = ┌ 1 0 ┐
└ 0 1 ┘
A · A^-1 = A^-1 · A = I
역행렬의 존재를 판별하는 행렬식
어떤 행렬에 대해 역행렬이 존재하는지 파악할 수 있는 특별한 수식을 행렬식(Determinant)이라 한다.
det() 의 기호로 표시한다.
A = ┌ a b ┐
└ c d ┘
det(A) = ad - bc
크기 변환행렬의 역행렬
변화된 크기만큼 거꾸로 크기를 변화시키는 방법으로 크기 변환행렬의 역행렬을 구할 수 있다.
//크기 변환행렬
S = ┌ a 0 ┐
└ 0 b ┘
S^-1 = ┌ 1/a 0 ┐
└ 0 1/b ┘
전단 변환행렬의 역행렬
원 공간에서 x축으로 a만큼 민 전단 변환행렬의 역행렬은 a의 반대수를 대입해 다음과 같이 구할 수 있다.
S = ┌ 1 a ┐
└ 0 1 ┘
S^-1 = ┌ 1 -a ┐
└ 0 1 ┘
회전 변환행렬의 역행렬
R_θ = ┌ cosθ -sinθ ┐
└ sinθ cosθ ┘
R_θ^-1 = ┌ cosθ sinθ ┐
└ -sinθ cosθ ┘
행렬 곱의 역행렬
(A · B)^-1 = B^-1 · A^-1
A · B = C
C · C^-1 = I
(A · B) · (A · B)^-1 = I
A^-1 · (A · B) · (A · B)^-1 = A^-1
(A^-1 · A) · B · (A · B)^-1 = A^-1
B · (A · B)^-1 = A^-1
B^-1 · B · (A · B)^-1 = B^-1 · A^-1
(A · B)^-1 = B^-1 · A^-1
5-2 실습
역행렬을 사용해 원래 형태로 되돌리기
정리
- 선형성과 행렬에 관련한 내용 학습
- 선형성이란 가법성과 1차 동차성의 두 가지 성질을 만족하는 성질
- 행렬의 기본 연산
- 표준기저벡터의 변화를 관찰해 행렬과 역행렬을 설계
출처
- 이득우의 게임수학 (https://www.onlybook.co.kr/entry/gamemath)