외적

김민수·2025년 2월 20일

게임수학

목록 보기
8/8

외적은 두 벡터를 입력으로 받아 새로운 벡터(3D) 또는 스칼라 값(2D)을 반환하는 연산이다.
외적을 통해 벡터들의 방향을 판별하거나 평면의 법선 벡터(Normal Vector)를 구할 수 있다.


1. 외적의 기본 개념

2D 공간에서의 외적

  • 결과값: 스칼라 값
  • 의미: 두 벡터의 회전 방향을 판별 (양수 = 반시계 방향, 음수 = 시계 방향, 0 = 동일한 선상)
  • 공식:
    A×B=AxByAyBxA \times B = A_x B_y - A_y B_x

3D 공간에서의 외적

  • 결과값: 새로운 3D 벡터
  • 의미: 두 벡터에 동시에 수직한 벡터를 생성 (법선 벡터 계산)
  • 공식:
    A×B=[AyBzAzByAzBxAxBzAxByAyBx]A \times B = \begin{bmatrix} A_y B_z - A_z B_y \\ A_z B_x - A_x B_z \\ A_x B_y - A_y B_x \end{bmatrix}

2. 외적의 기하학적 의미

2D 공간에서의 의미

  • 외적 값이 양수 → 벡터 B가 벡터 A를 기준으로 반시계 방향에 있음
  • 외적 값이 음수 → 벡터 B가 벡터 A를 기준으로 시계 방향에 있음
  • 외적 값이 0 → 두 벡터가 같은 직선상에 있음 (일직선)

3D 공간에서의 의미

  • 외적 결과는 두 벡터가 이루는 평면에 수직한 벡터
  • 오른손 법칙(Right-Hand Rule)을 사용하여 방향을 결정
    1. 첫 번째 벡터(A)를 손가락 방향으로 설정
    2. 두 번째 벡터(B)를 손바닥으로 감싸듯이 이동
    3. 엄지손가락이 가리키는 방향외적 결과 벡터의 방향

3. 게임에서 외적의 활용 사례

외적은 게임 개발에서 법선 벡터 계산, 회전 방향 판별, 충돌 판정, 카메라 회전, 지형 경사 판단 등 다양한 곳에서 사용된다.

1) 방향 판별 (2D 게임에서 왼쪽/오른쪽 판별)

외적을 사용해서 특정 지점이 플레이어의 왼쪽 또는 오른쪽에 있는지 판별할 수 있다.

예제

  • 플레이어 위치: P=(0,0)P = (0,0)
  • 플레이어가 바라보는 방향: F=(1,0)F = (1,0) (오른쪽)
  • 대상 위치: T=(0,3)T = (0,3) (위쪽)

👉 타겟 방향 벡터 계산

D=TP=(00,30)=(0,3)D = T - P = (0-0, 3-0) = (0,3)

👉 외적 계산

F×D=(1×30×0)=3F \times D = (1 \times 3 - 0 \times 0) = 3

✔️ 결과: 양수 → 대상은 플레이어의 왼쪽에 있음

만약 대상 위치가 T=(0,3)T = (0,-3) (아래쪽)이라면:

F×D=(1×(3)0×0)=3F \times D = (1 \times (-3) - 0 \times 0) = -3

✔️ 결과: 음수 → 대상은 플레이어의 오른쪽에 있음

📌 활용: AI의 탐색 방향 설정, 캐릭터의 이동 방향 감지 등

2) 표면의 법선 벡터 계산 (3D 게임에서 충돌 및 조명 처리)

3D 게임에서는 외적을 사용해서 법선 벡터(Normal Vector)를 계산하여 빛의 반사, 충돌 판정, 물리 연산 등에 활용한다.

예제: 삼각형의 법선 벡터 계산

📌 설정:

  • 삼각형의 세 점: P1=(1,0,0),P2=(0,1,0),P3=(0,0,1)P_1 = (1,0,0), P_2 = (0,1,0), P_3 = (0,0,1)
  • 두 벡터 정의:
    V1=P2P1=(1,1,0),V2=P3P1=(1,0,1)V_1 = P_2 - P_1 = (-1,1,0), \quad V_2 = P_3 - P_1 = (-1,0,1)

👉 외적 계산

N=V1×V2=[(1×10×0)(0×(1)(1×1))(1×01×(1))]=(1,1,1)N = V_1 \times V_2 = \begin{bmatrix} (1 \times 1 - 0 \times 0) \\ (0 \times (-1) - (-1 \times 1)) \\ (-1 \times 0 - 1 \times (-1)) \end{bmatrix} = (1, 1, 1)

✔️ 결과: 삼각형의 법선 벡터는 (1,1,1)(1,1,1), 이는 삼각형이 놓인 평면에 수직한 벡터다.

📌 활용: 빛의 반사 연산, 충돌 판정, 물리 연산 등에 사용


4. 외적 사용 시 주의할 점

  • 2D 외적은 스칼라 값이므로 방향 정보가 직접적으로 포함되지 않음 (방향은 부호로 판별)
  • 3D 외적은 입력 벡터와 수직한 방향의 벡터를 반환하지만, 좌표계에 따라 해석이 달라질 수 있음
    • 언리얼 엔진: 왼손 좌표계 사용 (하지만 외적 계산 자체는 오른손 법칙을 따름)
    • Unity & 일반 3D 그래픽: 오른손 좌표계 사용
profile
안녕하세요

0개의 댓글