내적(Dot Product)이란?
- 정규화된
한 벡터가 다른 벡터에 투영된 길이 값을 나타낸다.Ex) Dot(A , B) 란? B를 A위치로 회전했을 때 투영되어 직교되는 위치만큼의 크기 값
EX2) Dot(B,A)는?
각 벡터를 Normalize한 후의 스칼라 곱의 결과값이며 그 값은 두 벡터의 코사인의 값과 일치한다. 그러므로 음수 인지 양수 인지 그리고 각도의 크기 값도 알아 낼 수 있다.
1. 먼저 3D맥스상에서 임의좌표를 가지는 두 개의 벡터를 만든다.
C = [5 , 2, -3]
D = [8, 1, -4]
2. 먼저 A와 B의 크기를 구한다.
3. 벡터의 크기 값을 활용하여 정규화(Normalize)를 한다.
||Normalize A|| = 1 이어야 한다!
||Normalize B|| = 1 이어야 한다!
4. 두 벡터의 내적 A
B 을 구해 보자
A B = a1b1 + a2b2 + a3b3
= [(0.811 x 0.889) + (0.32 x 0.11) + (-0.487 x -0.444)]
= 0.72 + 0.035 + 0.216
= 0.971
5. 이제 내적의 결과값으로 여러가지 결과를 도출할 수 있게 됬음.
내적의 결과 값으로 알게 된 결론은?
Dot(A,
B) > 0이면
세타 값은 90도 이하
이므로 B가 A로부터 90도 각도 안에 있음을 알게 됐다.
è
이 결과는 게임로직에서 상당히 많이 사용될수 있다. A가 카메라이고 B가 오브젝트일경우 내적의 결과값이 양수라는 것은 B가 A의 시야안에 들어옴을 의미하고, 음수라는 것은 B가 A의 시야안에 들어오지 않음을 의미한다.
è
이 결과값을 토대로 디렉셔널 라이트와 오브젝트의 법선 벡터를 고려 했을 때 오브젝트가 빛을 얼마만큼 받고 있는지도 알 수 있게 됐다.
A가 디렉셔널 라이트이고 B가 법선 벡터를 가지고 있는 오브젝트라고 했을 때
이 정도의 빛을 받는 오브젝트임을 알 수 있다.
하지만, Dot(A, B) = 1이라고 한다면
복사량이 최대치가 되어 가장 많은 빛을 받는 상황이 된다. 12시에 떠있는 태양이라고 생각하면 이해가 빠를 듯~
Dot(A, B)
= 0이라면..
빛을 전혀 받지 않는 연산임을 알 수 있게 됐다. 밤 12시가 되겠다.
코사인 각도와 노멀라이즈 된 내적의 각도 값은 일치하므로 코사인 각도는 맥스의 Listner 창을 활용해서 쉽게 알 수 있다.
두 벡터 사이의 각도가 13.832도 라는 사실도 알게 됐다.
내적연산은 가볍다보니 셰이더 프로그램이나 물리 스크립트 에서도 굉장히 자주 쓰이는 기본적인 연산입니다~^^
Cg언어에 내장된 기본적인 Dot 공식- 두 벡터에 대해 -1 ~ 1 범위의 float 값을 얻을 수 있다. -1은 평행하며 나에게서 멀어지는 벡터, 1은 평행하며 나를 향해 다가오는 벡터, 0은 나와 완전히 수직인 벡터를 의미한다.
위에서 힘들게 구한 공식을 맥스 리스너(Max Listner)에서 쉽게 확인 할 수 있다.
'Study' 카테고리의 다른 글
PYTHON 기본 창 띄우기 "Hello World!" (0) | 2016.06.24 |
---|---|
외적 연산(Cross Product) 쉽게 이해하기 (0) | 2015.12.31 |
TA에게 반드시 필요한 기초 수학 정리. (0) | 2015.12.18 |
삼각비의 기본 (0) | 2015.12.18 |