벡터의 내적 복습
벡터의 내적이 게임에서는 어떻게 사용되는지 알아보기 전,
간단하게 백터의 내적을 복습해 보자

A 오브젝트의 벡터와 B 오브젝트의 벡터를 내적 하면,
0보다 큰 값(양수)이 나온다는 것을 통해 같은 방향을 바라보고 있다고 판단할 수 있고
A 오브젝트의 벡터와 C 오브젝트의 벡터를 내적 하면,
0보다 작은 값(음수)이 나온다는 것을 통해 다른 방향을 바라보고 있다고 판단할 수 있다
주로 게임에서는
두 오브젝트가 같은 방향을 바라보는지, 바라보지 않는지 확인이 가능하고
어떠한 오브젝트가 기준 오브젝트의 앞쪽인지 뒤쪽인지 구분도 가능하고
단순하게 두 벡터의 각도를 알아낼 수도 있다
내적 예시
유니티에서 벡터의 내적을 하려면,
Vector3.Dot()을 이용하면 된다
두 가지 예시를 통해 알아보자
첫 번째 예시,

총알이 발사되고
총알에 맞은 오른쪽 4개의 오브젝트들은
각각 밀려나가고 있다
총알에 맞은 오브젝트들은
본인의 벡터 방향으로 혹은 그 반대 방향으로 밀려나가는 것을 확인할 수 있다
위의 오브젝트 둘은 본인의 벡터 방향(빨간 막대 방향)으로 밀려나가고 있다
아래의 오브젝트 둘은 본인의 벡터 방향(빨간 막대 방향)과 반대 방향으로 밀려나가고 있다
총알의 벡터 방향과 같은 방향을 바라보고 있다면
굳이 밀려나가는 방향을 수정하지 않아도 된다
하지만, 총알의 방향과 다른 방향을 바라보고 있다면
밀려 나가는 방향을 수정해야 한다
따라서,
총알의 벡터와 오브젝터의 벡터의 내적을 통해 cos θ를 알아내고
부호만 바꿔주면
해당 방향의 반대 방향으로 간다는 점을 활용하면 된다
두 번째 예시,

각도를 지정해 주고 해당 범위 안에 들어오는지 체크를 하는 경우이다

탐지하는 각도를 θ라고 한다면
해당 각도를 절반으로 나누고 직선으로 올라가는 가상의 UP 벡터를 이용해
쉽게 구현할 수 있다
A벡터와 UP벡터를 내적 하면 θ/2라는 각도를 알아낼 수 있다
B벡터와 UP벡터를 내적 하면 θ'라는 각도를 알아낼 수 있다
육안상으로,
" θ' (B벡터와 UP벡터) < θ/2 (A벡터와 UP벡터)"
θ' (B벡터와 UP벡터)는 θ/2 (A벡터와 UP벡터)보다 육안으로 각도가 작다는 것을 확인할 수 있다
그렇지만 실제로,
cos 그래프를 통해 내적을 한 결과 값을 살펴보면

0도에서 180도를 기준으로(노란색과 초록색 부분),
각도가 증가할수록 내적값(cos θ)은 감소하는 것을 볼 수 있다
따라서,
내적을 한 결과 값을 비교하면
"θ' (B벡터와 UP벡터 내적) > θ/2 (A벡터와 UP벡터 내적)"
θ' (B벡터와 UP벡터 내적)는θ/2 (A벡터와 UP벡터 내적) 보다 내적값이 크다는 것을 알 수 있다
결국,
θ/2 (A벡터와 UP벡터 내적) 안에 오브젝트가 있는지 확인을 하려면
해당 θ/2(B벡터와 UP벡터 내적) 보다 내적 값이 같거나 커야 한다는 것을 확인할 수 있다
다시 정리하면,
단위벡터와 최대 각도를 180도라는 전제하에
θ값과 내적은 반비례하다는 것이다
'게임 수학 & 물리 > 게임 수학' 카테고리의 다른 글
[게임 수학] 벡터의 외적(2) (0) | 2024.02.26 |
---|---|
[게임 수학] 벡터의 외적 (1) (0) | 2024.02.25 |
[게임 수학] 벡터의 내적 (1) (0) | 2023.10.28 |
[게임 수학] 벡터의 기초 (2) (0) | 2023.10.17 |
[게임 수학] 벡터의 기초 (1) (0) | 2023.10.17 |