관리 메뉴

드럼치는 프로그래머

[DirectX] 선형대수의 기초 - 행렬(Matrix) 본문

★─Programing/☆─DirectX

[DirectX] 선형대수의 기초 - 행렬(Matrix)

드럼치는한동이 2010. 2. 17. 13:59

행렬이란

행렬은 벡터를 변환하는 용도로 사용된다.

4 X 4 크기의 행렬 M은 16개의 스칼라 원소들이 4 X 4의 격차로 배치된다.

i번째 열과 j번째 행에있는 원소를 m(ij)라고 표시하자.

 

항등행렬(Identity Maxrix(단위행렬)) : 대각선 값들만 1이고 나머지들은 모두 0인 행렬

0행렬 : 모든 원소들이 0인 행렬

전치행렬(M^T) : 행렬 M의 각 원소들의 위치를 m(ij)에서 m(ji)로 바꾼 행렬

역행렬 : 행렬 M에 대해 NM = MN = I(단위행렬)을 만족하는 행렬 N, (N = M^-1)

 

두 행렬을 곱하면 새로운 행렬이 되며 그 원소들은 한 행렬의 행과 다른 행렬의 열을 내적하여 구한다.

 

벡터의 변환

행렬의 가장 중요한 기능은 벡터의 변환이다.

행렬은 벡터를 다른 벡터로 변환하는 기능을 수행하는 수단이다.

한 벡터를 다른 벡터로 변환하는 과정은 그 벡터에 변환에 해당하는 행렬을 곱하는 것으로 수행한다.

Direct3D에서의 행렬과 벡터의 곱셈연산은,

 일반적으로 1 X 4크기의 벡터 v가 왼쪽에 오고, 4 X 4크기의 행렬 M이 오른쪽에 온다.

 즉 벡터 v를 변환 행렬 M을 적용하여 벡터 v' 로 변환하는 과정을 v' = vM의 방식으로 표기한다.

 

일반적으로 벡터라 할때는 행(row) 벡터를 의미한다.

 

동차좌표의 사용

3 X 3 행렬대신 4 X 4 행렬을 사용하는 이유는,

3 X 3 행렬은 3차원의 회전이나 크기조정, 기울임 등의 변환을 표현할 수 있지만,

이동변환은 표현하지 못한다.

이동을 위해서는 3차원벡터가 아니라 4차원벡터를 사용하고 변환행렬도 4 X 4 행렬을 사용해야 한다.

 

평면직교좌표(cartesian coordinates)

- 3차원 공간상의 한 점의 좌표를 3차원 벡터로 표현하는 경우

동차좌표(homogeneus coordinate)

- 동일한 3차원 공간을 4차원 벡터로 표현하는 경우

3차원 공간상의 한점의 동차좌표식은 1 X 4 벡터로 표현된다.

또한 동차좌표에 대한 변환은 4 X 4 행렬이어야 한다.

===> 동차좌표식 표현을 사용하면 이동변환을 하나의 행렬로 표현할 수 있고,

        여러 복합변환들을 행렬들의 곱으로 표현할 수 있는 등의 많은 장점들을 가진다.

 

ex) 비동차좌표 (x, y, z) 가 주어지면 이에 해당하는 동차좌표를 (x, y, z, 1)로 만들 수 있다.

또한 동차좌표 (x, y, z, w)가 주어지면 해당 비동차좌표를 (x/w, y/w, z/w)로 만들 수 있다.

 

직교행렬

행렬 M이 M M^T = M^T M = I 를 만족한다면 행렬 M을 직교행렬(orthogonal matrix)이라 한다.

직교행렬은 M^T = M^-1의 특징을 가진다. 또한 M이 직교행렬이면 M^T도 직교행렬이다.

두 직교행렬을 곱해도 그 결광는 직교행렬이다.

 

임의의 한 벡터 v를 직교행렬 M으로 변환해도 변환 후에 그 크기는 변하지 않는다.

즉 ||v|| = ||vM||이다.

두 벡터 u와 v가 직교하면 두 벡터를 직교행렬로 변환한 벡터들도 서로 직교한다.

즉 u · v = 0이면 (uM) · (vM) = 0 이다.

 

출처 : DirectX 10을 통한 3차원 게임 프로그래밍(박종승 저-그린출판)


Comments