내적과 외적에 대해 정리해보았습니다.
구글링 및 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 |