벡터의 대수적 의미는 A (x1, y1, z1)와 B (x2, y2, z2)처럼 어떤 집합인데

내적은 이 집합 간 원소의 곱의 합으로 스칼라 값을 출력하는 연산이다.

AB = (x1x2 + y1y2 + z1z2)

우리가 행렬을 곱할 때도 내적을 하고 있다고 생각할 수 있고

삼각형 대각선의 길이를 구하는것도 내적이라고 볼 수 있다.

 

이런 대수적 의미를 기하학적으로도 나타낼 수 있다.

AB = |A| |B| cosθ   

(대수적 의미와 기하학적 의미가 같음을 증명 : sonagi87174.tistory.com/18)

 

여기서부터 게임 프로그래밍에서 자주 쓰는 내적의 의미가 등장한다. 

공식 AB = |A| |B| cosθ 에서 |B|를 이항한  |A| cosθ 는 백터 A가 벡터B에 투영된 길이이다.

흔히 설명할때 벡터 B와 수직한 곳에서 햇빛이 비출 때 A의 그림자의 길이라고 하기도 한다.

만약 벡터 B가 처음부터 길이가 1인 단위벡터였다면 내적 AB가 바로 그림자의 길이가 된다.

 

또한 내적의 결과에 범위가 (-1 ~ 1) 인 cosθ 가 들어가는 점을 이용해서 두 벡터가 이루는 각의 관계:

양수면 예각, 0이면 수직, 음수면 둔각임을 알아낼 수 있다.

만약 |A| |B| 가 둘다 1이라면 내적 AB = cosθ 만 남게되어 정확한 (-1~1) 범위로 몬스터의 시야각에 내가 보이는지 체크할 수 있게된다. (먼저 음수, 양수를 판별하고 양수일 때만 정규화 하여 정확한 판별을 하면 비용이 적게 들 것이다.)

 

마지막으로 만약 주어진 두 벡터가 이루는 실제 각을 알고 싶다면  cosθ  = AB / (|A| |B|) 이므로 

역함수 arccos를 사용하면 컴퓨터가 편리하게 각을 구해다 줄 것이다.

 

결과적으로 보면 내적의 연산인 곱셈 몇번과 덧셈 몇번으로 많은 정보를 알 수 있는 것이다.

 

'프로그래밍 > 물리, 수학, 3D' 카테고리의 다른 글

Fix Your Timestep 번역  (0) 2018.06.17
integration basics 번역  (0) 2018.06.17