2015. 12. 1. 0:35
https://blog.naver.com/nagne2011/220554979706
<벡 터>
: 물체가 이동하는 방향
특징)
i) (다이렉트9 에서는) 왼손좌표계를 사용
ii) 벡터의 크기(길이)는
(그러나 코드 내에 루트 연산이 들어가면 계산이 느려지므로 보통 제곱을 이용한다
iii) 노말벡터 : 벡터의 길이가 1인 벡터.
일반 벡터를 노멀벡터화 시키는걸 '노멀라이징' (정규화) 라고 하며
의 방법을 이용해서 정규화한다
하므로
iv) 벡터의 크기비교 : 각 항(x,y,z) 끼리 비교하여, x1 = x2, y1 = y2, z1 = z2등으로 비교하면 되지만
벡터는 보통 float값으로 비교등식이 엇나갈 경우가 있다
따라서 서로의 차이가 일정값 이하일경우 등식이라고 본다
(단, 이때 A는 0.0001쯤의 극히 적은 소수)
< 벡터의 합 >
간단히 자릿수 끼리 더하면 된다
즉,
벡터의 차도 같은 방식이다
그래프로 그리면 아래와 같다

< 벡터의 곱 >
i) 벡터와 스칼라의 곱
(x,y,z) * a = (x*a, y*a, z*a)
이때 벡터*스칼라 인지, 스칼라*벡터 인지 중요하다
보통 스칼라를 뒤에 곱하는경우가 많다
ii) 벡터끼리의 곱
#내적(Dot)
벡터끼리의 내적을 구하는 방식으로 두 각의 각도를 유추할 수 있다

즉 Dot(a,b)는 스칼라값으로 나온다
그리고 이 내적은
a * b = a벡터의 길이 * b벡터의 길이 * cos$
이므로 아래의 식을 성립한다

#외적(Cross)
외적은 두 벡터의 진행방향과 수직인 벡터를 탐색할때 사용한다
a(1,2,3)
b(5,7,9)
Cross(a,b) = [ (2*9 - 3*7), (3*5 - 1*9), (1*7 - 2*5) ]
= (-3, 6, 3)
그래프로 표현하면 아래와 같다

구하는 방법은 간단하다
(a X b) 이니까, 즉 a가 앞에 있고 뒤로 b가 크로스되니까,
a위치에 왼손 날을 올려둔뒤 b방향으로 손가락을 접으면, 그때 엄지손가락의 방향이
외적의 방향과 일치한다(c)
만약 (b X a) 일 경우 c의 방향이 반대가 된다
< 행 렬 >
i) "상등이다" = 행렬A와, 행렬B가 상등이다

즉, 두 행렬의 모든 항목이 일치한다는 뜻
ii) 스칼라의 곱 = 행렬A * 5

iii) 행렬의 합

각 항목끼리 합하면 된다
iv) 행렬의 곱
행렬 곱의 법칙의 의해 곱하면 된다
단, A*b와 B*A의 값이 다르다 (교환법칙이 성립하지 않는다)
따라서 행렬끼리의 곱에선 좌우가 특히 중요하다
v) 항동 행렬 : 행렬 각 항목의 대각선이 1인 행렬
(Identify = I)

항동 행렬은 어느 행렬과 곱해도 그대로 나온다
즉, 행렬 M * I = M 이고, I * M = M 이다
vi) 역행렬 : 행렬 M과 그의 역행렬 M^-1을 곱할경우 그 값은 항동행렬이 나온다
즉, M * N = I 일때, N = M^-1 이다
vii) 전치행렬 : 행렬의 맴버값이, 대각선을 기준으로 서로 변환되는개념
(불확실)
3D 프로그래밍으로 넘어가서,
Direx9에선 4x4 행렬을 주로 사용한다
4x4 행렬을 이용한 좌표점 변화는 세가지 종류가 있다
1) 스케일링 Scaling = 크기 변경
2) 로테이션 Rotaiton = 방향 회전
3) 트렌스레이션 Translation = 위치 이동
이때,
3D에서의 이동, 스케일링, 회전 등의 연산이 효율적으로 하기 위해 고안된 방법이 행렬을 사용하는 방법입니다.
3차원 좌표를 표현하기 위해서는 (x, y, z)로 표현하게 되겠지요. 거기에 표준화계수라는 마지막 숫자를 하나 더 넣어 (x, y, z,w)로 표현합니다. 마지막 표준화 계수의 역할은 스케일 계수로 이해하시면 되겠습니다. 이 값에 비례하여 스케일 된다는 의미이죠.
즉
x = x / w;
y = y / w;
z = z / w;
그래서 행렬로 표현하면 4x4 행렬로 구성됩니다. 이렇게요. ( x, y, z, 1 ) 여기서 1로 함은 스케일을 안하겠다는 의미겠죠.
3차원 좌표를 표현하기 위해서는 (x, y, z)로 표현하게 되겠지요. 거기에 표준화계수라는 마지막 숫자를 하나 더 넣어 (x, y, z,w)로 표현합니다. 마지막 표준화 계수의 역할은 스케일 계수로 이해하시면 되겠습니다. 이 값에 비례하여 스케일 된다는 의미이죠.
즉
x = x / w;
y = y / w;
z = z / w;
그래서 행렬로 표현하면 4x4 행렬로 구성됩니다. 이렇게요. ( x, y, z, 1 ) 여기서 1로 함은 스케일을 안하겠다는 의미겠죠.
1) 스케일링 = 크기변경

2) 로테이션 = 방향전환
각 로테이션(x,y,z)에 따라 방법이 다르다
-> 왼손좌표계 이므로, 방향이 엄지를 두고 손이 감기는 쪽이 정방향 회전 이다
3) 트랜스레이션 = 이동

각 행렬의 곱은 순서가 중요하다
따라서 S→R→,T 순서대로 적용시켜야 한다
728x90