이득우의 게임 수학
벡터의 크기는 항상 양수이므로, 내적의 부호는 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)
캐릭터의 시야 밖에 물체가 있다.
'게임 수학 > 이득우의 게임 수학' 카테고리의 다른 글
내적을 활용한 벡터의 투영 (0) | 2023.04.23 |
---|---|
램버시안 반사율 모델 (0) | 2023.04.22 |
내적(Dot product) (0) | 2023.04.20 |
코헨-서덜랜드 라인 클리핑 알고리즘 (0) | 2023.04.19 |
브레젠험 알고리즘(Bresenham's algorithm) (0) | 2023.04.18 |