Math & Physicss

[Math] 내적

송만덕 2022. 1. 9. 22:30

 

내적

 

내적은 보통 두 벡터의 방향이 얼마나 일치하는 지의 용도로 쓰이며, 방법은 다음과 같다.

  • 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이 나온다.

 


이 외에도 점과 평면간의 최단거리 혹은 선이 평면과 접하는 접점 등을 구할떄도 내적을 사용하여 구할 수 있다.