- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[DirectX] 선형대수의 기초 - 행렬(Matrix) 본문
행렬이란
행렬은 벡터를 변환하는 용도로 사용된다.
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차원 게임 프로그래밍(박종승 저-그린출판)
[출처] [DirectX] 선형대수의 기초 - 행렬(Matrix)|작성자 yhWoo
'★─Programing > ☆─DirectX' 카테고리의 다른 글
[DirectX] 행렬 / 행렬의 연산 (0) | 2010.02.17 |
---|---|
[DirectX] 벡터 / 벡터의 연산 (0) | 2010.02.17 |
[DirectX] 선형대수의 기초 - 벡터(vector) (0) | 2010.02.17 |
[DirectX] 벡터, 행렬, 평면 (0) | 2010.02.17 |
[DirectX] 3D 프로그래밍에서의 기본?! (0) | 2009.01.29 |