관리 메뉴

기억을 위한 기록들

[3D 게임수학] 3. 행렬(Matrix) 본문

그래픽스(Graphics)/Game Math

[3D 게임수학] 3. 행렬(Matrix)

에드윈H 2021. 2. 25. 15:12

* 이 글은 개인노트와 같아서 계속해서 수정되고 있습니다. *

 

이번은 벡터와 선현 변환을 행렬로 표현할 수 있는 행렬이다.

수학에서 선형대수학의 기본 정리(Fundamental theorem of linear algebra)라는 것이 있다. 
이는 행렬과 선형 변환은 본질적으로 같다는 것을 증명한 내용을 담고 있다. 
[출처] 6. 행렬(Matrix)의 설계 방법|작성자 이득우 https://blog.naver.com/PostView.nhn?blogId=destiny9720&logNo=221401729370&categoryNo=22&parentCategoryNo=&from=thumbnailList

 

행렬의 종류

- 정방 행렬(square matrix) : 행과 열의 개수가 같음.
- 영 행렬(zero matrix) : 모든 요소가 0인 행렬.
- 전치 행렬(transpose matrix) : 행렬의 각 요소들의 행과 열을 뒤바꿔 나온 행렬
전치 행렬

- 대칭 행렬(symmetric matrix) : 대칭 행렬은 항상 정방 행렬이며, 행 번호와 열변호가 같은 주대 각선상 기준으로 성분들이 대칭으로 나타난다.
http://www.ktword.co.kr/abbr_view.php?m_temp1=4762

- 항등 행렬(identity matrix) : 숫자 1과 같이 무엇을 곱해도 원래의 수가 나오게 하는 행렬이다. 즉 주대각선분들은 모두 1이고, 나머지 성분들은 0이다.
https://brunch.co.kr/@linecard/454

 

1. 행렬의 기본 연산

 

행렬의 두연산

 

1. 행렬의 합 (여기서 굳이 길게 설명 안 한다.)

 

2. 스칼라와 행렬의 곱 ( 두 행렬을 곱하려면 A의 열의 개수와 B의 행의 개수가 반드시 같아야 한다. 그리고 교환 법칙이 성립되지 않는다.)

 

- 행렬 곱셈과 전치 행렬 사이의 재미있는 관계.

(A X B)^T = B^T X A^T (^T 전치행렬)

 

- 두 정방 행렬(서로 곱하는 순서와 상관X) 항등 행렬을 산출 -> 두 정방 행렬은 서로에 대해 역행렬.

A X B =  B X A = I (I 항등 행렬) 일 때,

A X A^-1 =  A^-1 X A = I (A^-1 역행렬) 

 

역행렬을 갖지 않는 행렬 -> 특이행렬(singular matrix)이라고 한다.

   역행렬을 가지는 행렬 ->  가역행렬(invertible matirx) or 정칙행렬(non-singular matirx/반특이 행렬) 라고함.

 

- 두행렬의 곱셈에 역행렬을 취하면 각각의 역행렬 순서를 바꿔서 곱한것과 같다.

(A X B)^-1 =  B^-1 X A^-1

 

- 행렬과 벡터의 곱 

- 행렬과 행렬의 곱

 

2. 행렬식(Determinant)과 역행렬

행렬식은 어떤 행렬에 대한 역행렬이 존재하는지를 감별해주는 공식이다. 
행렬식 값이 0이면 그 행렬의 역행렬은 존재하지 않는다는 것을 의미한다. 
행렬식은 역행렬이 존재하는지 유무를 판별하는 특징이 있어서 결정하다(Determine)에서 유래해 영어로는 Determinant라는 용어로 불리는데,  아시아로 넘어오면서 행렬식(行列式)이라는 단어가 되었다.

[출처] 8. 행렬식(Determinant)|작성자 이득우 / https://blog.naver.com/PostView.nhn?blogId=destiny9720&logNo=221402399478&categoryNo=22&parentCategoryNo=&from=thumbnailList

 

2x2 행렬이 있다고하면, 행렬식 det(A)는 아래와 같다.

 

라플라스 전개를 3X3 행렬에 적용한 결과

라플라스 전개? 어떤 정방 행렬이 있을 때, 하나의 행과 하나의 열을 그 행렬에서 제외하고 남은 보다 작은 정방행렬의 행렬식을 이용하여, 원래 정방행렬의 행렬식을 구하는 기법

위처럼 나오는 det(A)가 0이 아닌 행렬만이 역행렬을 가질 수 있다.

그런데 컴퓨터 그래픽스에서 나오는 행렬들은 모두 직교행렬이라서 역행렬을 구할때 위 방법을 쓰진 않는다.

 

역행렬을 쉽게 구할수 있는 몇가지 특수한 경우가 있다.

1. 직교 행렬(Orthogonal)의 역행렬

직교행렬의 정의

행렬을 구성하는 모든 행과 열 벡터가 자기 자신을 제외한 나머지 행과 열벡터와 90도를 이룸동시에 크기가 1인 단위 벡터구성된 행렬을 의미 (대표적인 직교행렬로는 항등행렬이 있다.)
[출처] 9. 역행렬(Inverse Matrix) 구하기|작성자 이득우

직교행렬의 예제로 우회전하는 행렬이 있다. 우회전 하는 행렬은 어떤 벡터 공간을 우회전 시켜준다고 하자.

 

https://blog.naver.com/destiny9720/221401729370

우회전의 본질을 생각하면 기존의 X축이 -Y축으로, Y축이 X축으로 변하는 것이 우회전인 것이다.

기존의 X축이 -Y축으로 변하는 것이니 행렬의 첫 번째 열은 (0, -1) 이 된다.

Y축은 X축으로 변하므로 두 번째 열은 (1, 0)이 된다. 이 둘을 합한 우회전하는 행렬은 다음과 같다.

우회전 하는 행렬

직교 행렬의 특징 중 하나로, 전치 행렬이 바로 역행렬이 된다는 것.

좌화전에 대한 행렬은 다음과 같다.

 

2. 대각 행렬(diagonal matrix)의 역행렬

대각행렬?
정방행렬에서 주 대각선분을 제외한 나머지 요소의 값이 0인 행렬을 대각행렬이라 한다.
https://datacookbook.kr/m/80

대각행렬의 역행렬을 다음과 같다.

https://blog.naver.com/destiny9720/221401729370

이후에 다시 언급하겠지만 대각 행렬은 선형 변환의 각 차수를 a배 b배로 늘리는 의미를 가지고 있는데, 이는 컴퓨터 그래픽스의 트랜스폼을 구성하는 삼대장 중 하나인 스케일(scale) 행렬을 의미한다.

 

 

3. 밀기 행렬(shear matrix)의 역행렬

밀기 행렬이란?
대각 성분이 모두 1이고 마지막 행에서 대각 성분을 제외한 성분만 값이 있는 경우 그 값을 -한 값이 역행렬이 되는 행렬.

https://blog.naver.com/destiny9720/221402703960

밀기 행렬도 마찬가지로 컴퓨터 그래픽스의 트랜스폼을 구성하는 삼대장 중 하나인 이동 행렬(translation matrix)과 밀접한 관련이 있다.

 

위의 세 가지 특수한 경우는 컴퓨터 그래픽에서 자주 사용되기 때문에 역행렬을 계산할 때 예외적으로 처리하도록 만들면 빠르게 역행렬을 구할 수 있다.

[출처] 9. 역행렬(Inverse Matrix) 구하기|작성자 이득우

 

3. 벡터와 행렬

- 벡터의 성분들을 하나의 열로 표현하는 것은 열 벡터

- 하나의 행으로 표현하는 것은 행 벡터

- 보통 수학은 열 벡터 기준

- OpenGL는 열 벡터 기준, DirectX는 행벡터 기준.

 

 

두 벡터의 행렬을 이용한 내적외적 방법

- 내적 방법 :

  두 열벡터 중 앞의 열 벡터를 전치 행렬(행렬의 각 요소들의 행과 열을 뒤바꿔 나온 행렬)로 바꾼 후 곱하기.

- 외적 방법 : 

1.  행렬식 이용

2. 행렬의 곱셈 이용.

   - v X w를 행렬 연산으로 나타내려면, 벡터 v를 이용해서 반대칭 행렬을 만든다.

     그리고 w를 열 벡터로 만들고 행렬 곱셉을 하면 된다.

반대칭행렬이란?
주 대각선을 기준으로 나머지 성분들이 대칭이 되지만 기호는 반대인 행렬.

https://ko.wikipedia.org/wiki/%EB%B0%98%EB%8C%80%EC%B9%AD_%ED%96%89%EB%A0%AC