[게임 수학] 내적

LeeTaes·2023년 12월 10일
0

게임수학

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

1. 내적

  • 내적(dot) : 벡터 공간에서 두 벡터의 내적은 그들의 성분별 곱의 합을 의미
  • 두 벡터가 얼마나 비슷한 방향을 향하고 있는지를 나타냅니다.
  • 계산 공식 1 : v1 ⋅ v2 = (v1.x * v2.x + v1.y * v2.y)
  • 계산 공식 2 : |v1| * |v2| * cos(Degree)

[1 - 1] 내적의 특징

  • 내적은 교환법칙, 결합법칙이 성립하며, 결과가 스칼라 값으로 나옵니다.
    • 교환법칙 : v1 ⋅ v2 = v2 ⋅ v1
    • 결합법칙 : v1 ⋅ (v2 + v3) = (v1 ⋅ v2) + (v1 ⋅ v3)

[1 - 2] 결과값 분석

  • 내적의 결과를 통해 두 벡터의 관계를 유추할 수 있습니다.
  • 추가적으로 v1, v2를 정규화하여 내적한다면?
    |v1| * |v2|가 1이 되므로 cos(Degree)를 구할 수 있습니다.

  1. 내적의 결과가 0이 나온 경우

    • v1과 v2의 크기가 존재하기 때문에 cos(Degree)가 0이 나온다는 의미와 동일합니다.
    • 즉, v1과 v2의 사이각이 90도라는 것을 의미합니다.
  2. 내적의 결과가 0보다 큰 경우

    • 내적의 결과가 0보다 크다면 v1과 v2의 사이각이 90도보다 작은 경우를 의미합니다.
  3. 내적의 결과가 0보다 작은 경우

    • 내적의 결과가 0보다 작다면 v1과 v2의 사이각이 90도보다 큰 경우를 의미합니다.

2. 내적 실습 - UE_Blueprint

  • 내적을 이용해 적이 특정 범위 안에 존재하는지 체크하는 실습을 진행해보도록 하겠습니다.
  • 역삼각함수를 이용해 특정 각도를 구할 수 있으나 지금은 간단히 테스트해보도록 하겠습니다.
  • 목표 : 전방 90도 각도, 거리 500 내의 적 판별

[2 - 1] 테스트를 위한 설정

  1. 플레이어의 시야각을 90도라고 가정했을 때 눈으로 판별하기 쉽게 캐릭터 블루프린트에 해당 각도에 대한 물체를 추가해줍니다.
    (-45도의 기둥, 45도의 기둥)

  2. 탐지할 Enemy Blueprint class를 추가합니다.


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

  1. 플레이어의 현재 위치와 Enemy의 현재 위치를 통해 적과의 거리 계산
    • (EnemyPos - PlayerPos).Length()로 거리 연산
    • 만약 거리가 500보다 멀다면 false
  2. 플레이어의 시야각 속에 적이 있는지 판별
    • 플레이어의 전방 벡터와 플레이어에서의 적으로 향하는 벡터를 내적해 특정 각도 안에 있는지 확인하기
    • Cos(Degree)의 결과가 더 작다면 false

2번 추가 설명 그림

  • 좌우로 동일하게 45도를 체크할 것이므로 간단히 생각하면 cos(45)의 결과보다 내적의 결과가 크면 적이 안에 있다고 생각할 수 있습니다.
  1. 실행 결과

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

0개의 댓글