Make Unreal REAL.
article thumbnail
이득우의 게임 수학

 

벡터의 크기는 항상 양수이므로, 내적의 부호는 cosθ로 결정된다.

 


빨간 벡터를 기준 A라고 할 때, 다른 벡터 B가 A와 이루는 각도에 따라 내적의 부호는 아래와 같다.

 

이를 통해 두 벡터의 방향이 어떻게 다른지 알 수 있다.

  • 0 < 내적
    같은 방향을 향하고 있다.
  • 내적 = 0
    서로 직교한다.
  • 내적 < 0
    서로 다른 방향을 향하고(혹은 마주보고) 있다.

 

 

게임에서 이를 활용하면, 물체가 캐릭터의 어느 방향에 있는지 알 수 있다.

 

캐릭터의 앞 방향을 벡터 f, 캐릭터가 물체를 향하는 벡터를 v라고 할 때,

  • 0 < f·v
    캐릭터의 앞에 물체가 있다.
  • f·v = 0
    캐릭터의 바로 옆에 물체가 있다.
  • f·v < 0
    캐릭터의 뒤에 물체가 있다.

 

 

 

위치 판별 뿐만 아니라, 캐릭터의 시야 판별에도 사용할 수 있다.

 

캐릭터의 앞 방향을 벡터 f, 캐릭터가 물체를 향하는 벡터를 v, 캐릭터와 물체가 이루는 각도를 β, 캐릭터의 좌우 시야각을 θ라고 하자.

 

f·v = |f||v|cosβ이므로, 계산 전에 f와 v를 정규화시켜 크기를 1로 만들면 cosβ만 남게 된다.

  • fₑ·vₑ = cosβ

 

이때 cosβ와 cos(θ/2)의 크기를 비교하면, 물체가 캐릭터의 시야에 들어왔는지 판별할 수 있다.

  • fₑ·vₑ ≥ cos(θ/2)
    캐릭터의 시야 안에 물체가 있다.
  • fₑ·vₑ < cos(θ/2)
    캐릭터의 시야 밖에 물체가 있다.

 

profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그