MOONSUN
[게임 수학] 벡터의 내적(Dot product) 과 외적(Cross product) 본문
게임 프로그래밍을 할 때 아주 기본 지식인 내적과 외적을 게임 프로그래밍 관점에서 간단하게 정리 해보고자 한다.
간단요약.
내적: 두 벡터가 얼마나 “같은 방향”인가? (cos 사용)
외적: 두 벡터가 얼마나 “엇갈려 있는가?” (sin 사용)
평행 → 외적 = 0
직각 → 외적 = 제일 큼
1. 벡터의 내적 (Dot product)
1-1. 정의

| ∣a∣, ∣b | | 벡터의 크기 (길이) |
| θ | 두 벡터 사이의 각도 |

각 성분이 위와 같을 때,

내적은 " 각 성분 곱의 합 " 으로 계산할 수 있으며

동시에 " 벡터 크기 × 벡터 크기 × cosθ " 로도 표현
내적은 n차원 벡터에서도 성분별 곱의 합으로 계산할 수 있으며, 내적의 결과는 스칼라(숫자 하나)이다.
1-2. 기하학적 의미

- |u|, |v| = 벡터 크기(길이)
- θ = 두 벡터 사이 각도
cos 값에 따라 결과가 달라진다.
| 방향 | 각도 | cosθ | 내적 |
| 같은 방향 | cosθ = 1 | 내적 | |
| 직각 | cosθ = 0 | 내적 = | |
| 반대 방향 | cosθ = -1 | 내적 |
u 또는 v 한쪽의 길이가 1이면 반대쪽에 투영한 길이가 된다.
둘 다 1이면 결과는 cos θ 가 된다.
1-3. 내적 활용
- 각도 판별

두 벡터 사이 각도 구할 수 있음
(플레이어와 적의 시야각 판정에 활용)
- 조명 계산
법선 벡터(N)와 광원 방향(L)의 내적

표면이 빛을 얼마나 받는지 계산 가능
(Lambert 조명 등..)
- 투영(Projection)
한 벡터를 다른 벡터 방향으로 뽑아낼 때 사용

2. 벡터의 외적 (Cross product)
2-1. 정의

외적의 결과는 새로운 벡터다. (내적은 스칼라였는데, 외적은 벡터!)
2-2. 기하학적 의미

- 크기 : 두 벡터가 만드는 평행사변형의 넓이
- 방향 : 두 벡터에 동시에 수직인 방향 (오른손 법칙으로 결정)
즉, 외적은 “두 벡터에 모두 직각인 벡터" 를 구해준다.
2-3. 외적 활용
- 법선 벡터(Normal) 구하기
- 3D 모델에서 삼각형 면의 두 변을 외적하면 -> 그 면에 수직인 법선 벡터가 나옴
- 빛 반사, 충돌 계산에 필수
- 좌표계 정의
- 카메라의 앞/오른쪽/위쪽 벡터를 외적으로 계산

- 회전축 구하기
- 두 벡터 사이를 회전해야 할 경우, 외적으로 회전축 계산 가능
3. 내적 vs 외적 비교
| 구분 | 내적 (·) | 외적 (×) |
| 결과 | 스칼라(숫자) | 벡터 |
| 의미 | 방향의 유사도 | 두 벡터에 모두 수직인 방향 |
| 활용 | 각도, 조명, 투영 | 법선 구하기, 좌표계, 회전축 |
'D3D' 카테고리의 다른 글
| [D3D 이론] 빛(Lighting) 모델 : Phong, Blinn-Phong 와 수식 의미 (0) | 2025.09.22 |
|---|---|
| [게임 수학] 행렬 연산의 특징 : 비가환성, 역행렬, 전치(Transpose) 등.. (0) | 2025.09.19 |
| [그래픽스] 빛(Lighting) 모델 : Lambertian Shading (램버트 조명 모델) (0) | 2025.09.15 |
| [D3D] 상수버퍼(Constant Buffer) 와 HLSL 정렬규칙 (0) | 2025.09.10 |
| [D3D 이론] OpenGL vs DirectX 행렬 표현 차이 및 DirectX의 행렬 불일치로 인한 Transpose (0) | 2025.09.10 |