- 외적(cross) : 두 벡터를 가지고 다른 벡터를 만드는 연산입니다.
- 결과로 나오는 벡터는 두 입력 벡터에 수직이면서 오른쪽 손의 엄지손가락 규칙에 따라 방향이 결정됩니다.
- 대표적인 공식은 다음과 같습니다.
- 수직성 : 두 벡터를 외적한 결과는 원본 벡터들과 수직입니다.
- 즉, 외적은 두 벡터가 이루는 평면에 수직인 벡터를 생성합니다.- 방향 : 오른손 규칙을 사용하여, 첫 벡터에서 두 번째 벡터로 나가는 방향입니다.
- 외적을 이용해 적이 특정 범위 안에 존재하는지 체크하는 실습을 진행해보도록 하겠습니다.
- 목표 : 전방 90도 각도, 거리 500 내의 적 판별 (x, y 축의 2차원 형태로 진행)
(내적과 같은 목적이므로, 실습을 위한 설정은 "게임수학 - 내적"을 참고해주세요.)
플레이어의 forwardVector에서 특정 각도(45, -45)로 회전시킨 벡터1, 벡터2를 세팅합니다.
적이 특정 거리 내에 존재하는지 체크합니다.
추가로 "적의 위치벡터 - 플레이어의 위치벡터"를 통해 적으로 향하는 벡터를 구해줍니다.
외적을 통해 적이 특정 범위 내에 있는지 체크합니다.
플레이어의 시야각(90) 안에 적이 존재하지 않는 경우
플레이어의 시야각(90) 안에 적이 존재하는 경우
- 성공적으로 보이나 1가지 문제점이 존재합니다.
- 현재는 x, y축만을 사용하는 2차원에서 테스트를 진행중이기 때문에 두 벡터의 외적이 스칼라값으로 출력됩니다.
- 두 벡터가 이루는 각도가 0도에서 180도 사이일 때 외적의 결과는 양수이며, 반대로 두 벡터가 이루는 각도가 180도에서 360도 사이일 때 외적의 결과는 음수입니다.
- 즉, v1과 k의 각이 180도를 초과하고, k와 v2의 각이 180도 이내인 경우라면?
- 다르지만 같은 부호라고 생각해 적이 범위 안에 존재한다고 출력됩니다.