[Math] 내적
내적
내적은 보통 두 벡터의 방향이 얼마나 일치하는 지의 용도로 쓰이며, 방법은 다음과 같다.
- a와 b는 벡터이다.
- a · b = (ax * bx) + (ay * by) + (az * bz) = n /// n = 스칼라 값
- a · b = |a| |b| cos(º)
내적의 결과인 n의 값은 스칼라 값으로 도출이 되는데 값에 따른 의미는 다음과 같다.
- n = 0 // 두 벡터가 수직
- n = 1 // 두 벡터의 방향이 일치.
- n = -1 // 두 벡터가 서로 마주봄

또한 해당되는 2개의 벡터 크기가 1이라면 벡터 사이각에 대한 cos 값을 얻을 수도 있으며,
이를 통해 두 벡터간의 사이각을 구해낼 수 있다.
또 자기 자신과 내적을 할 경우엔 자신의 크기 제곱을 구할 수 있으며
프로그래밍에서는 제곱근을 구하는 것이 느리기 때문에 벡터의 길이보다 길이 제곱을 사용하는 경우가 더 많다.

내적을 활용할 수 있는 경우는 두 벡터의 방향관계를 알 수 있다는 점을 통해서
위의 그림과 같이 적과 플레이어의 위치관계를 내적을 통해 알 수 있다는 것이 가장 대표적이다.
만약 플레이어의 방향벡터와 적으로의 방향벡터의 내적 값이 음수라면 플레이어 뒤에 존재하는 것이고,
양수이면 플레이어의 앞에 존재한다는 뜻이 된다.
또한 내적은 어떤 벡터를 중심으로 정해진 각 범위 내에 물체가 존재하는지 판별하는 데도 유용하다.
(범위 기반 스킬들과 같은 부분)
예를 들어 적에게 시야각이 있고, 플레이어가 잠입 시에 들켰는지를 확인해보는 매커니즘을 설계한다고 했을 때
적의 현재 방향 벡터(Forawrd)를 v, 적이 플레이어에게 향하는 벡터를 w, 적의 시야각을 a라고 해보자.

이후 v,w의 사이각을 B 라고 한다면, B가 a/2 보다 작아지면 들켰다 라고 볼 수 있겠다.
만약 두 벡터가 크기가 1인 단위 벡터가 된다면 두 벡터가 평행인지 아닌지도 알 수 있다.
(평행의 여부는 외적을 통해도 알아낼 수 있다. 때문에 굳이 크기가 1인 벡터를 만들기 위해 정규화를 하진 않아도 된다.)
만약 두 벡터가 평행이라면 같은 방향 혹은 반대 방향으로 향한다는 뜻이다.
따라서 cos의 값이 1 혹은 -1이기 때문에 이를 절대값으로 따지면 1이 나온다.
이 외에도 점과 평면간의 최단거리 혹은 선이 평면과 접하는 접점 등을 구할떄도 내적을 사용하여 구할 수 있다.