일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UELOG
- 스마트포인터
- UML관련
- 정렬
- 선택정렬
- BFS
- C++최적화
- 애셋로드
- unorder_map
- 강참조
- 람다
- stl
- enumasByue
- 언리얼가비지컬렉터
- 자료구조
- C++
- UE_LOG
- 알고리즘
- 정렬알고리즘
- moreeffectiveC++
- 델리게이트
- 약참조
- 언리얼엔진구조체
- dataasset
- 크리티컬섹션
- 데이터애셋
- map
- UE4 커스텀로그
- 프로그래머스
- 람다사용정렬
- Today
- Total
기억을 위한 기록들
[3D 게임수학] 3. 행렬(Matrix) 본문
* 이 글은 개인노트와 같아서 계속해서 수정되고 있습니다. *
이번은 벡터와 선현 변환을 행렬로 표현할 수 있는 행렬이다.
수학에서 선형대수학의 기본 정리(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) : 대칭 행렬은 항상 정방 행렬이며, 행 번호와 열변호가 같은 주대 각선상 기준으로 성분들이 대칭으로 나타난다.
- 항등 행렬(identity matrix) : 숫자 1과 같이 무엇을 곱해도 원래의 수가 나오게 하는 행렬이다. 즉 주대각선분들은 모두 1이고, 나머지 성분들은 0이다.
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)는 아래와 같다.
라플라스 전개? 어떤 정방 행렬이 있을 때, 하나의 행과 하나의 열을 그 행렬에서 제외하고 남은 보다 작은 정방행렬의 행렬식을 이용하여, 원래 정방행렬의 행렬식을 구하는 기법
위처럼 나오는 det(A)가 0이 아닌 행렬만이 역행렬을 가질 수 있다.
그런데 컴퓨터 그래픽스에서 나오는 행렬들은 모두 직교행렬이라서 역행렬을 구할때 위 방법을 쓰진 않는다.
역행렬을 쉽게 구할수 있는 몇가지 특수한 경우가 있다.
1. 직교 행렬(Orthogonal)의 역행렬
직교행렬의 정의
행렬을 구성하는 모든 행과 열 벡터가 자기 자신을 제외한 나머지 행과 열벡터와 90도를 이룸과 동시에 크기가 1인 단위 벡터로 구성된 행렬을 의미 (대표적인 직교행렬로는 항등행렬이 있다.)
[출처] 9. 역행렬(Inverse Matrix) 구하기|작성자 이득우
직교행렬의 예제로 우회전하는 행렬이 있다. 우회전 하는 행렬은 어떤 벡터 공간을 우회전 시켜준다고 하자.
우회전의 본질을 생각하면 기존의 X축이 -Y축으로, Y축이 X축으로 변하는 것이 우회전인 것이다.
기존의 X축이 -Y축으로 변하는 것이니 행렬의 첫 번째 열은 (0, -1) 이 된다.
Y축은 X축으로 변하므로 두 번째 열은 (1, 0)이 된다. 이 둘을 합한 우회전하는 행렬은 다음과 같다.
직교 행렬의 특징 중 하나로, 전치 행렬이 바로 역행렬이 된다는 것.
좌화전에 대한 행렬은 다음과 같다.
2. 대각 행렬(diagonal matrix)의 역행렬
대각행렬?
정방행렬에서 주 대각선분을 제외한 나머지 요소의 값이 0인 행렬을 대각행렬이라 한다.
대각행렬의 역행렬을 다음과 같다.
이후에 다시 언급하겠지만 대각 행렬은 선형 변환의 각 차수를 a배 b배로 늘리는 의미를 가지고 있는데, 이는 컴퓨터 그래픽스의 트랜스폼을 구성하는 삼대장 중 하나인 스케일(scale) 행렬을 의미한다.
3. 밀기 행렬(shear matrix)의 역행렬
밀기 행렬이란?
대각 성분이 모두 1이고 마지막 행에서 대각 성분을 제외한 성분만 값이 있는 경우 그 값을 -한 값이 역행렬이 되는 행렬.
밀기 행렬도 마찬가지로 컴퓨터 그래픽스의 트랜스폼을 구성하는 삼대장 중 하나인 이동 행렬(translation matrix)과 밀접한 관련이 있다.
위의 세 가지 특수한 경우는 컴퓨터 그래픽에서 자주 사용되기 때문에 역행렬을 계산할 때 예외적으로 처리하도록 만들면 빠르게 역행렬을 구할 수 있다.
[출처] 9. 역행렬(Inverse Matrix) 구하기|작성자 이득우
3. 벡터와 행렬
- 벡터의 성분들을 하나의 열로 표현하는 것은 열 벡터
- 하나의 행으로 표현하는 것은 행 벡터
- 보통 수학은 열 벡터 기준
- OpenGL는 열 벡터 기준, DirectX는 행벡터 기준.
두 벡터의 행렬을 이용한 내적외적 방법
- 내적 방법 :
두 열벡터 중 앞의 열 벡터를 전치 행렬(행렬의 각 요소들의 행과 열을 뒤바꿔 나온 행렬)로 바꾼 후 곱하기.
- 외적 방법 :
1. 행렬식 이용
2. 행렬의 곱셈 이용.
- v X w를 행렬 연산으로 나타내려면, 벡터 v를 이용해서 반대칭 행렬을 만든다.
그리고 w를 열 벡터로 만들고 행렬 곱셉을 하면 된다.
반대칭행렬이란?
주 대각선을 기준으로 나머지 성분들이 대칭이 되지만 기호는 반대인 행렬.
'그래픽스(Graphics) > Game Math' 카테고리의 다른 글
[3D 게임수학] 4. 선형 변환(Linear Transformation) (0) | 2021.03.01 |
---|---|
평균/분산/표춘편차 구하기/ O(1)/ C++ (0) | 2021.03.01 |
[3D 게임수학] 2. 벡터(Vector) (0) | 2021.02.15 |
[3D 게임수학] 1. 선형대수(Linear Algerbra) (0) | 2021.02.08 |
UE4 쿼터니온 활용 참고 (0) | 2020.05.18 |