[게임 수학] 외적

LeeTaes·2023년 12월 14일
0

게임수학

목록 보기
4/5
post-custom-banner

1. 외적

  • 외적(cross) : 두 벡터를 가지고 다른 벡터를 만드는 연산입니다.
  • 결과로 나오는 벡터는 두 입력 벡터에 수직이면서 오른쪽 손의 엄지손가락 규칙에 따라 방향이 결정됩니다.
  • 대표적인 공식은 다음과 같습니다.



[1 - 1] 외적의 특징

  • 외적은 내적과 다르게 교환/결합 법칙이 성립하지 않으며, 결과값으로 벡터가 출력됩니다.
    외적이 특정한 방향성을 가지며, 벡터의 순서가 결과에 영향을 미치는 특성을 반영하기 때문에 벡터의 순서와 방향에 주의해야 합니다.
  • 수직성 : 두 벡터를 외적한 결과는 원본 벡터들과 수직입니다.
    - 즉, 외적은 두 벡터가 이루는 평면에 수직인 벡터를 생성합니다.
  • 방향 : 오른손 규칙을 사용하여, 첫 벡터에서 두 번째 벡터로 나가는 방향입니다.

  • 위 그림에서 a벡터와 b벡터의 결과가 보라색 벡터를 의미합니다. (오른손 규칙)
  • 즉, 순서를 바꿔 b벡터 부터 a벡터로 외적하는 경우 아래 방향의 벡터가 출력됨을 예상할 수 있습니다.
    (두 벡터를 외적할 때 두 벡터가 시계방향인지 아닌지에 따라 z축의 부호가 변경됩니다.)

2. 외적 실습 - UE_Blueprint

  • 외적을 이용해 적이 특정 범위 안에 존재하는지 체크하는 실습을 진행해보도록 하겠습니다.
  • 목표 : 전방 90도 각도, 거리 500 내의 적 판별 (x, y 축의 2차원 형태로 진행)
    (내적과 같은 목적이므로, 실습을 위한 설정은 "게임수학 - 내적"을 참고해주세요.)

[2 - 1] 레벨 블루프린트 작성

  1. 플레이어의 forwardVector에서 특정 각도(45, -45)로 회전시킨 벡터1, 벡터2를 세팅합니다.

  2. 적이 특정 거리 내에 존재하는지 체크합니다.
    추가로 "적의 위치벡터 - 플레이어의 위치벡터"를 통해 적으로 향하는 벡터를 구해줍니다.

  3. 외적을 통해 적이 특정 범위 내에 있는지 체크합니다.

    • 플레이어의 -45도 벡터 : v1
    • 플레이어의 45도 벡터 : v2
    • 플레이어에서 적으로 향하는 벡터 : k
  • v1과 k를 외적한 결과와 k와 v2를 외적한 결과가 같은 부호를 가지면 true, 아니면 false를 리턴합니다.
  1. 결과 확인
  • 플레이어의 시야각(90) 안에 적이 존재하지 않는 경우

  • 플레이어의 시야각(90) 안에 적이 존재하는 경우

  1. 문제점
  • 성공적으로 보이나 1가지 문제점이 존재합니다.
  • 현재는 x, y축만을 사용하는 2차원에서 테스트를 진행중이기 때문에 두 벡터의 외적이 스칼라값으로 출력됩니다.
  • 두 벡터가 이루는 각도가 0도에서 180도 사이일 때 외적의 결과는 양수이며, 반대로 두 벡터가 이루는 각도가 180도에서 360도 사이일 때 외적의 결과는 음수입니다.
  • 즉, v1과 k의 각이 180도를 초과하고, k와 v2의 각이 180도 이내인 경우라면?
    - 다르지만 같은 부호라고 생각해 적이 범위 안에 존재한다고 출력됩니다.

profile
클라이언트 프로그래머 지망생
post-custom-banner

0개의 댓글