행렬 - MATRIX
수학에서, 행렬(行列, matrix)은 수나 기호, 수식 등을 네모꼴로 배열한 것으로, 괄호로 묶어 표시한다. 3차원 이미지를 2차원 평면에 투영하거나 사실적인 움직임을 그려내기 위해서 사용한다
행렬은 행(row)가 열(column)이 있는 격자모양 배열에 스칼라를 나열한 것입니다.
행렬 안에 나열된 스칼라를 요소(element)라 부르고 a11처럼 나열할 수 있습니다.
유니티와 다이렉트 X에서는 4*4 행렬을 사용합니다. (정사각형 행렬)
행열의 요소에 관해서
일때 a와 b가 같은 요소들을 대각요소(diagonal element)라고 합니다.
정사각형 행렬에서 대각 요소를 제외한 나머지 요소가 모두 0인 행렬을 대각행렬(diagonal matrix)
이라고 합니다.
1. 단위 행렬 - Unit Matrix ( Identity Matrix)
대각 행렬의 대각요소가 모두 1인 행렬을 말합니다.
2. 영행렬 - Zero Matrix (null Matrix)
모든 요소가 0인 행렬을 말합니다.
3. 전치행렬 - Transpose Matrix
m x n의 행렬에서의 전치행렬은
의 요소에서
로 바꿔놓는것 입니다.
즉 행과 열의 같은 번호끼리 교환하는것 입니다.
4. 역 행렬 - Inverse Matrix
만약 을 갖는 행렬 A가 있다고 하고, 에서 인 행렬 B가 존재한다면, 선형대수학에서 A를 정칙행렬(正則行列,regular matrix) , 가역행렬(Invertible matrix)이라고 하고, 행렬 B를 갖는 역행렬 말합니다. |
[출처 - 위키백과]
말이 너무 어렵습니다. 쉽게 A라는 행렬에 B 행렬을 곱했을때 단위 행렬이 나온다면 B행렬을
A행렬의 역행렬이라고 합니다. 또 역행렬은 존재하거나 존재하지 않을 수 있습니다.
5. 연산
A. 행렬의 덧셈
2개의 행렬의 동일한 각 행렬의 요소끼리 더해주면 됩니다.
B. 행렬의 뺄셈
2개의 행렬의 동일한 각 행렬의 요소끼리 빼해주면 됩니다.
C. 행렬의 곱셈
행렬의 곱셈은 행렬의 행의 길이와 곱하고자 하는 행렬의 열 길이가 같아야만 가능합니다.
불가능한 경우 | 비고 |
|
1 x 3 , 2 x 2 이므로 A행렬 행(3) , B행렬 열(2)이라서 불가능 |
|
1 x 3 , 1 x 3 이므로 A행렬 행(3) , B행렬 열(1)이라서 불가능 |
행렬 A의 행과 행렬 B의 열을 각기 곱여 덧셈합니다.
6. 행렬 변환
3D 공간에서 어떠한 오브잭트를 특정한 벡터방향으로 이동시킬려고 한다고 생각한다면,
기본적으로 사용하는 벡터는 1 x 3 벡터이므로 서로 곱할 수가 없습니다.
그러므로 1 x 4 행 벡터(x , y , z , w)로 만들어서 곱해주여야 하며, 이동을 할때는 마지막 w 값을 1로 이동을 하지 않을 때는 0으로 만들어서 사용합니다.
각기 벡터와의 곱을 이용하면 행렬의 변환을 통해서 3D 공간에서의 오브잭트를 이동, 회전 , 스케일을 변환시킬 수 있습니다.
A . 이동 행렬
(x , y , z , 1) 벡터를 사용하여, 이동시킬 수 있습니다.
[일반적인 3D에서의 이동 행렬]
[동차 좌표[Homogeneous Coordinates] 이동 행렬]
B. 회전 행렬
행렬을 사용하면 , x, y, z 에서 벡터 라디안으로 회전 시킬 수 있습니다.
회전축을 기준으로 시계방향으로 회전합니다.
C. 크기 변환 행렬
[여담]
이런 행렬의 변환은 거의 모든 3D 게임에서 사용되며, 다이렉트 게임을 만들때나 유니티에서도 빈번히 사용됩니다. 다만, 우리는 미리 정의된 함수를 이용하는 거겠지요...
다음은 캐릭터를 이동 , 회전시킨후에 Transform의 matrix를 확인한 결과 입니다.
'프로그래밍 관련 > 게임 수학' 카테고리의 다른 글
[게임 수학] 삼각함수 [Trigonometric Function] - 2 (0) | 2016.08.06 |
---|---|
[게임 수학] 삼각함수 [Trigonometric Function] - 1 (0) | 2016.08.05 |
[게임 수학] 벡터 - Vector (0) | 2016.02.07 |