GameDevelop/Notes

벡터의 내적과 외적

Une_ 2026. 1. 1. 17:23

내적과 외적에 대해 정리해보았습니다.

구글링 및 ChatGPT의 도움을 받아 작성했습니다.

 

 

1. 벡터 내적 (Dot Product)

1.1 정의

두 벡터 A, B 가 있을 때, 내적은 다음과 같이 정의된다.

A · B = |A||B|cosθ

여기서 θ는 두 벡터 사이의 각도다.

 

벡터 A와 B의 내적은 A와 B의 길이를 곱한 후 그에 코사인 각도를 곱한 값이다.

 

성분 기준으로 보면:

  • 2D: A·B = AxBx + AyBy
  • 3D: A·B = AxBx + AyBy + AzBz

내적의 결과는 스칼라 값이다.

 

내적은 한 벡터가 다른 벡터 방향으로 얼마나 투영(projection)되어 있는지를 나타낸다.

  • cosθ > 0 → 두 벡터가 같은 방향 계열
  • cosθ = 0 → 두 벡터가 수직
  • cosθ < 0 → 두 벡터가 반대 방향 계열

특히, 두 벡터가 정규화(normalized) 되어 있다면:

A · B = cosθ

이 성질은 게임 로직에서 매우 자주 사용된다.

 

1.2 게임 프로그래밍 활용 사례

1) 전방/후방 판별

플레이어가 적을 보고 있는가?
  • 플레이어의 Forward 벡터: F
  • 플레이어 → 적 방향 벡터: D (정규화)
float dot = Dot(F, D);
  • dot > 0 : 앞쪽
  • dot < 0 : 뒤쪽
  • dot ≈ 1 : 거의 정면

➡️ 시야 판정(FOV), 백어택 판정 등에 사용

 

 

2) 각도 기반 판정 (FOV)

float cosHalfFov = cos(FovAngle * 0.5f);
if (Dot(F, D) >= cosHalfFov)
{
// 시야 안에 있음
}

 

 

  • acos 를 쓰지 않고 내적 값 비교만으로 각도 판정

3) 속도 분해 (미끄러짐, 반사)

  • 어떤 방향 성분만 분리하고 싶을 때
  • 벽을 따라 미끄러지는 이동 처리

1.3 한 문장 정리 (면접용)

내적은 두 벡터의 방향 일치 정도를 수치로 표현한 것이며,
게임에서는 전방 판정, 시야(FOV), 각도 비교에 사용됩니다.

 

2. 벡터 외적 (Cross Product)

2.1 정의

외적은 3차원 벡터에서만 정의되며, 결과는 벡터다.

A × B = |A||B|sinθ · N

  • N: A와 B에 수직인 단위 벡터
  • 방향은 오른손 법칙(Right-Hand Rule) 을 따른다.

성분 기준 수식:

A × B = (
AyBz - AzBy,
AzBx - AxBz,
AxBy - AyBx
)

 

  • 결과 벡터는 두 벡터가 만드는 평면에 수직
  • 크기는 두 벡터가 이루는 평행사변형의 넓이

즉,

  • |A × B| = 0 → 두 벡터가 평행

 

2.2 게임 프로그래밍 활용 사례

1) 방향성 판별 (좌 / 우)

타겟이 플레이어 기준으로 왼쪽인가 오른쪽인가?
  • Forward: F
  • Target Direction: D
Vector3 cross = Cross(F, D);
 
  • cross.y > 0 → 왼쪽
  • cross.y < 0 → 오른쪽

➡️ 회전 방향 결정, 카메라 회전, AI 판단

 

2) 법선 벡터(Normal Vector) 계산

삼각형 표면의 법선 계산

Vector3 normal = Normalize(Cross(B - A, C - A));

➡️ 라이팅, 충돌 처리, 물리 계산의 기본

 

3) 회전 축 계산

  • 회전해야 할 축(axis)을 구할 때
  • LookAt, Quaternion 생성 과정의 핵심 요소

2.3 한 문장 정리 (면접용)

외적은 두 벡터에 수직인 방향 벡터를 만들어내며,
게임에서는 회전 방향, 법선 벡터, 좌우 판정에 사용됩니다.

 

내적 vs 외적 한눈에 비교

구분 내적 (Dot) 외적 (Cross)
결과 스칼라 벡터
주요 용도 각도, 방향 일치도 수직 벡터, 방향성
핵심 키워드 cosθ, 투영 sinθ, 법선
게임 활용 FOV, 판정, 투영 법선, 회전축, 좌우 판별

 

 

 

'GameDevelop > Notes' 카테고리의 다른 글

해시테이블과 해시충돌  (0) 2026.01.09
A* 알고리즘  (0) 2026.01.05
l-value와 r-value  (0) 2026.01.01
쿼터니언(Quaternion) vs 오일러 각(Euler Angle)  (0) 2026.01.01
RAII - Resource acquisition is initialization  (0) 2024.09.10