외적은 두 벡터를 입력으로 받아 새로운 벡터(3D) 또는 스칼라 값(2D)을 반환하는 연산이다.
외적을 통해 벡터들의 방향을 판별하거나 평면의 법선 벡터(Normal Vector)를 구할 수 있다.
1. 외적의 기본 개념
2D 공간에서의 외적
- 결과값: 스칼라 값
- 의미: 두 벡터의 회전 방향을 판별 (양수 = 반시계 방향, 음수 = 시계 방향, 0 = 동일한 선상)
- 공식:
A×B=AxBy−AyBx
3D 공간에서의 외적
- 결과값: 새로운 3D 벡터
- 의미: 두 벡터에 동시에 수직한 벡터를 생성 (법선 벡터 계산)
- 공식:
A×B=⎣⎢⎡AyBz−AzByAzBx−AxBzAxBy−AyBx⎦⎥⎤
2. 외적의 기하학적 의미
2D 공간에서의 의미
- 외적 값이 양수 → 벡터 B가 벡터 A를 기준으로 반시계 방향에 있음
- 외적 값이 음수 → 벡터 B가 벡터 A를 기준으로 시계 방향에 있음
- 외적 값이 0 → 두 벡터가 같은 직선상에 있음 (일직선)
3D 공간에서의 의미
- 외적 결과는 두 벡터가 이루는 평면에 수직한 벡터
- 오른손 법칙(Right-Hand Rule)을 사용하여 방향을 결정
- 첫 번째 벡터(A)를 손가락 방향으로 설정
- 두 번째 벡터(B)를 손바닥으로 감싸듯이 이동
- 엄지손가락이 가리키는 방향이 외적 결과 벡터의 방향
3. 게임에서 외적의 활용 사례
외적은 게임 개발에서 법선 벡터 계산, 회전 방향 판별, 충돌 판정, 카메라 회전, 지형 경사 판단 등 다양한 곳에서 사용된다.
1) 방향 판별 (2D 게임에서 왼쪽/오른쪽 판별)
외적을 사용해서 특정 지점이 플레이어의 왼쪽 또는 오른쪽에 있는지 판별할 수 있다.
예제
- 플레이어 위치: P=(0,0)
- 플레이어가 바라보는 방향: F=(1,0) (오른쪽)
- 대상 위치: T=(0,3) (위쪽)
👉 타겟 방향 벡터 계산
D=T−P=(0−0,3−0)=(0,3)
👉 외적 계산
F×D=(1×3−0×0)=3
✔️ 결과: 양수 → 대상은 플레이어의 왼쪽에 있음
만약 대상 위치가 T=(0,−3) (아래쪽)이라면:
F×D=(1×(−3)−0×0)=−3
✔️ 결과: 음수 → 대상은 플레이어의 오른쪽에 있음
📌 활용: AI의 탐색 방향 설정, 캐릭터의 이동 방향 감지 등
2) 표면의 법선 벡터 계산 (3D 게임에서 충돌 및 조명 처리)
3D 게임에서는 외적을 사용해서 법선 벡터(Normal Vector)를 계산하여 빛의 반사, 충돌 판정, 물리 연산 등에 활용한다.
예제: 삼각형의 법선 벡터 계산
📌 설정:
- 삼각형의 세 점: P1=(1,0,0),P2=(0,1,0),P3=(0,0,1)
- 두 벡터 정의:
V1=P2−P1=(−1,1,0),V2=P3−P1=(−1,0,1)
👉 외적 계산
N=V1×V2=⎣⎢⎡(1×1−0×0)(0×(−1)−(−1×1))(−1×0−1×(−1))⎦⎥⎤=(1,1,1)
✔️ 결과: 삼각형의 법선 벡터는 (1,1,1), 이는 삼각형이 놓인 평면에 수직한 벡터다.
📌 활용: 빛의 반사 연산, 충돌 판정, 물리 연산 등에 사용
4. 외적 사용 시 주의할 점
- 2D 외적은 스칼라 값이므로 방향 정보가 직접적으로 포함되지 않음 (방향은 부호로 판별)
- 3D 외적은 입력 벡터와 수직한 방향의 벡터를 반환하지만, 좌표계에 따라 해석이 달라질 수 있음
- 언리얼 엔진: 왼손 좌표계 사용 (하지만 외적 계산 자체는 오른손 법칙을 따름)
- Unity & 일반 3D 그래픽: 오른손 좌표계 사용