내적

김민수·2025년 2월 18일

게임수학

목록 보기
7/8

내적은 두 벡터를 하나의 스칼라 값으로 변환하는 연산을 의미한다. 이 때 연산은 벡터의 방향성과 크기를 고려해서 이루어지며, 두 벡터의 방향이 같을 수록 내적 값은 커지고, 방향이 다를 수록 내적 값이 작아진다. 즉, 내적이 0이면 두 벡터가 직교(Orthogonal, 수직)하는 관계라는 의미이다.


1. 내적의 기하학적 정의

두 벡터 A\mathbf{A}B\mathbf{B}내적 은 다음과 같이 정의된다.

AB=A×Bcosθ\mathbf{A} \cdot \mathbf{B} = |\mathbf{A}| \times |\mathbf{B}| \cos\theta

여기서,

  • A,B|\mathbf{A}|, |\mathbf{B}| 는 각각 벡터 A\mathbf{A}B\mathbf{B}의 크기(길이)
  • θ\theta 는 두 벡터가 이루는 각도
  • cosθ\cos\theta 는 두 벡터의 방향이 얼마나 유사한지를 나타냄

이 정의를 통해 내적의 몇 가지 중요한 특성을 확인할 수 있다.

1.1. 내적과 벡터의 방향성

cosθ\cos\theta 값에 따라 내적의 의미가 달라진다.

  • θ=0\theta = 0^\circ (완전히 같은 방향)cosθ=1\cos\theta = 1
    • 두 벡터가 같은 방향을 향하면 내적 값이 최대가 됨
  • θ=90\theta = 90^\circ (서로 수직인 경우)cosθ=0\cos\theta = 0
    • 두 벡터가 직교(orthogonal)하면 내적 값이 0
  • θ=180\theta = 180^\circ (완전히 반대 방향)cosθ=1\cos\theta = -1
    • 두 벡터가 반대 방향이면 내적 값이 최소가 됨

즉, 내적 값이 크면 두 벡터가 유사한 방향을 가짐을 의미하고, 내적 값이 0이면 두 벡터가 수직을 이룸을 의미한다.


2. 벡터의 크기(길이) 정의

벡터의 크기는 유클리드 거리(Euclidean Distance)를 이용해서 계산된다.

2.1. 2차원 벡터의 크기

벡터 A=(Ax,Ay)\mathbf{A} = (A_x, A_y) 의 크기는 다음과 같이 계산된다.

A=Ax2+Ay2|\mathbf{A}| = \sqrt{A_x^2 + A_y^2}

2.2. 3차원 벡터의 크기

벡터 B=(Bx,By,Bz)\mathbf{B} = (B_x, B_y, B_z) 의 크기는 다음과 같다.

B=Bx2+By2+Bz2|\mathbf{B}| = \sqrt{B_x^2 + B_y^2 + B_z^2}

3. 내적의 성분(좌표) 기반 정의

기하학적 정의 외에도, 내적은 벡터의 성분을 이용해서 아래와 같이 계산할 수도 있다.

3.1. 2차원 내적 공식

두 벡터 A=(Ax,Ay)\mathbf{A} = (A_x, A_y)B=(Bx,By)\mathbf{B} = (B_x, B_y) 에 대해,

AB=AxBx+AyBy\mathbf{A} \cdot \mathbf{B} = A_x B_x + A_y B_y

3.2. 3차원 내적 공식

벡터가 3차원인 경우에도 성분별로 내적을 계산할 수 있다.

AB=AxBx+AyBy+AzBz\mathbf{A} \cdot \mathbf{B} = A_x B_x + A_y B_y + A_z B_z

4. 내적의 기하학적 정의와 성분 정의의 관계

두 벡터 A=(Ax,Ay)\mathbf{A} = (A_x, A_y)B=(Bx,By)\mathbf{B} = (B_x, B_y) 가 이루는 각도 θ\theta 에 대해,
삼각함수를 이용하면 코사인 값은 다음과 같이 정의된다.

cosθ=ABAB\cos\theta = \frac{\mathbf{A} \cdot \mathbf{B}}{|\mathbf{A}| |\mathbf{B}|}

위 식에서 성분 기반 내적 공식을 대입하면,

cosθ=AxBx+AyByAB\cos\theta = \frac{A_x B_x + A_y B_y}{|\mathbf{A}| |\mathbf{B}|}

양변에 AB|\mathbf{A}| |\mathbf{B}| 를 곱하면,

AxBx+AyBy=ABcosθA_x B_x + A_y B_y = |\mathbf{A}| |\mathbf{B}| \cos\theta

즉, 기하학적 정의와 성분(좌표) 기반 정의가 동일함을 알 수 있다.


5. 게임에서 내적 활용 사례

내적은 게임 개발에서 시야 판별, 방향 판정, 충돌 감지, 타격 판정, 카메라 시스템 등 다양한 곳에서 사용된다.

5.1. 플레이어와 대상 물체 간의 전후방 판별

내적을 활용하면 대상이 플레이어의 앞쪽인지, 뒤쪽인지 쉽게 판별할 수 있다.

  • 플레이어 위치: P(xp,yp)P(x_p, y_p)
  • 플레이어의 정면(시선) 방향(Forward Vector): F=(Fx,Fy)F = (F_x, F_y)
  • 대상의 위치: T(xt,yt)T(x_t, y_t)

플레이어에서 타겟 방향을 나타내는 벡터:

TP=(xtxp,ytyp)T - P = (x_t - x_p, y_t - y_p)

해당 벡터와 플레이어의 정면 방향 벡터의 내적:

F(TP)=Fx(xtxp)+Fy(ytyp)F \cdot (T - P) = F_x (x_t - x_p) + F_y (y_t - y_p)
  • 내적 값이 양수 → 대상이 플레이어 앞쪽에 위치
  • 내적 값이 음수 → 대상이 플레이어 뒤쪽에 위치
  • 내적 값이 0 → 대상이 플레이어의 정면이나 측면에 위치
  • 대상이 측면에 위치할 때, 왼쪽인지 오른쪽인지에 대한 판별은 외적이라는 개념으로 가능하다.

✅ 대상이 전방에 있을 때 (θ=0\theta = 0^\circ)

  • 플레이어 위치: P=(0,0)P = (0,0)
  • 플레이어 정면 방향 벡터: F=(1,0)F = (1,0) (오른쪽을 바라봄)
  • 대상 위치: T=(3,0)T = (3,0) (플레이어 앞쪽)

👉 타겟 방향 벡터 계산

  • TP=(30,00)=(3,0)T−P=(3−0,0−0)=(3,0)

👉 내적 계산

  • F(TP)=(1,0)(3,0)=(1×3)+(0×0)=3F⋅(T−P)=(1,0)⋅(3,0)=(1×3)+(0×0)=3

✅ 대상이 후방에 있을 때 (θ=180\theta = 180^\circ)

  • 플레이어 위치: P=(0,0)P=(0,0)
  • 플레이어 정면 방향 벡터: F=(1,0)F=(1,0) (오른쪽을 바라봄)
  • 대상 위치: T= (3,0)(-3,0) (플레이어 뒤쪽)

👉 타겟 방향 벡터 계산

  • TP=(30,00)=(3,0)T−P=(−3−0,0−0)=(−3,0)

👉 내적 계산

  • F(TP)=(1,0)(3,0)=(1×3)+(0×0)=3F⋅(T−P)=(1,0)⋅(−3,0)=(1×−3)+(0×0)=−3

✅ 대상이 정확한 좌측에 있을 때 (θ=90\theta = 90^\circ)

  • 플레이어 위치: P=(0,0)P=(0,0)
  • 플레이어 정면 방향 벡터: F=(1,0)F=(1,0) (오른쪽을 바라봄)
  • 대상 위치: T= (0,3)(0,3) (플레이어 왼쪽)

👉 타겟 방향 벡터 계산

  • TP=(00,30)=(0,3)T−P=(0−0,3−0)=(0,3)

👉 내적 계산

  • F(TP)=(1,0)(0,3)=(1×0)+(0×3)=0F⋅(T−P)=(1,0)⋅(0,3)=(1×0)+(0×3)=0

5.2. 시야각(FOV) 내 판별

게임에서 플레이어의 시야각(Field of View, FOV) 내에 오브젝트가 포함되는지 확인하는 것은 AI의 적 탐지, 슈팅 게임에서의 타겟팅, 경비 시스템 등에서 중요한 요소다.

시야각 내 판별 공식

cosθ=FDFD=FxDx+FyDyFD\cos\theta = \frac{F \cdot D}{|F| |D|} = \frac{F_x D_x + F_y D_y}{|F| |D|}

이때, θ\theta플레이어의 정면 벡터 FF 와 타겟 방향 벡터 DD 가 이루는 각도다.

플레이어가 볼 수 있는 전체 시야의 각도FOVFOV 라고 할 때, 대상이 시야 내에 있으려면:

cosθcos(FOV2)\cos\theta \geq \cos\left(\frac{\text{FOV}}{2}\right)

즉, 계산한 내적 값이 시야각의 코사인 값 이상이면, 대상은 시야 내에 포함된다.


✅ 시야각 판별 예제

  • 플레이어 위치: P=(0,0)P=(0,0)
  • 플레이어 정면 방향 벡터: F=(1,0)F=(1,0) (오른쪽을 바라봄)
  • 시야각: 90도
  • 대상 위치: T=(2,1)T = (2,1)

👉 타겟 방향 벡터 계산

D1=T1P=(20,10)=(2,1)D_1 = T_1 - P = (2 - 0, 1 - 0) = (2,1)

👉 내적 계산 및 코사인 값 비교

cosθ=(1,0)(2,1)(1,0)(2,1)=(1×2+0×1)12+02×22+12=21×5=250.89\cos\theta = \frac{(1,0) \cdot (2,1)}{|(1,0)| |(2,1)|} = \frac{(1 \times 2 + 0 \times 1)}{\sqrt{1^2 + 0^2} \times \sqrt{2^2 + 1^2}} =\frac{2}{1 \times \sqrt{5}} = \frac{2}{\sqrt{5}} \approx 0.89

시야각 90도의 임계값cos(45)=220.707\cos(45^\circ) = \frac{\sqrt{2}}{2} \approx 0.707 이다.

대상 TT의 코사인 값이 0.89로 0.707보다 크므로 시야 내에 있다는 것을 알 수 있다.

profile
안녕하세요

0개의 댓글