* 정의
외적(cross product, outer product)은 3차원에서만 정의되는 개념으로 두 3차원 벡터 a와 b의 외적(a × b)은 a, b 모두에 직교인 또 다른 벡터 n로 정의된다.
- 기본 공식, 사이 각도와 관련된 공식

- 왼손, 오른손 좌표계에서의 방향
이때 a, b에 모두 직교인 벡터 n의 방향은 두가지가 있을 수 있는데, 방향 선택은 오른손 좌표계면 오른손 법칙 왼손 좌표계면 왼손 법칙을 사용한다.


- 사이 각도
a × b = ||a|| ||b|| sinθ n
위와 같은 외적의 공식에서 n은 a,b모두에 직교인 벡터이며, θ는 a, b사이의 각도이다. (0 <= θ <= π)

- a, b가 서로 수직하면(θ = π/2 or θ = 3π/2) sinθ의 절댓값이 최대가 되어 a × b의 크기가 가장 커진다.
- a, b가 서로 평행하면(θ = 0 or θ = π) sinθ은 0이되어 a × b = 0이된다.
- 두 벡터가 직교할 때 절댓값이 가장 크다.
외적의 크기를 비교하면 두 벡터가 얼마나 직교하는 지 확인할 수 있다.
- 외적의 크기
외적의 크기는 다음과 같이 정의할 수 있다.
||a × b|| = ||a|| ||b|| |sinθ|
위와 같은 외적의 공식에서 n은 a,b모두에 직교인 벡터이며, θ는 a, b사이의 각도이다. (0 <= θ <= π)
기하학적으로 생각해보면 평행사변형의 크기와 같고 두 벡터가 직교할 때 최댓값을 갖는다.

- 좌표계 관점
좌표계에서 직접 어떤 벡터인지 유도할 수 있다.
a = (a1, a2, a3), b = (b1, b2, b3)
(i, j, k)은 양의 직교기저이다. (각각 (1,0,0), (0,1,0), (0,0,1))
아래와 같은 유도과정으로 다음 식을 얻을 수 있다. (왼손좌표계든 오른손좌표계든 둘 다 성립한다.)
a × b = (a2*b3 - a3*b2, a3*b1 - a1*b3, a1*b2 - a2*b1) != b × a


- 행렬 관점
다음과 같이 표현할 수도 있다.

// 2차원 유사 외적 : 2차원에서는 두 벡터에 수직인 벡터가 존재하지 않지만, 하나의 2차원 벡터 U = (ux, uy)에 수직인 벡터 V는 구할 수 있다.
- 추가 공식

1, 3번 공식이 자주 쓰인다.
* 사용 이유
- 게임에서 사용하는 방식
게임에서는 두 방향 벡터를 가지고 이와 수직인 벡터를 구해야할 때 사용한다.
가장 대표적으로 컴퓨터 그래픽스 분야에서 삼각형의 법선 벡터를 구할 때 사용된다.


- 사용 사례
@ 삼각형의 법선벡터
삼각형의 법선 벡터를 구할 수 있다.
@ 회전 시뮬레이션
회전력을 시뮬레이션하기 위해서 토크(돌림힘)를 거쳐야 하는데, 이때 힘에 따라 객체를 회전을 시뮬레이션할 수 있다.
* 내적과 외적 활용하기
문제 1. 플레이어와 몬스터가 존재하고, 플레이어가 바라보는 방향을 v1, 플레이어위치를 a 몬스터 위치를 b, 하늘 방향벡터를 up이라고 할때 플레이어가 몬스터를 바라보기 위해서는 어느방향으로 얼마나 회전해야할까? (단 플레이어와 몬스터가 존재하는 좌표계는 왼손좌표계이다.)

1.1. 플레이어에서 몬스터로의 방향을 v2 = b - a라고 하자.
1.2. v1과 v2를 내적하여 각도를 구한다. 단, 크기만 나오기 때문에 아직 방향은 알 수 없다.
사이의 각도를 θ라고 하면 θ = cos-1( v1 · v2 / ||v1|| ||v2||)
여기서 θ는 두 각도 중 더 작은 각도를 의미하기 때문에 최소회전으로 몬스터를 바라볼 수 도록 보장할 수 있다.
1.3. 방향을 판별하기 위해서 v1과 v2를 외적하여 그 결과인 n을 up벡터와 내적하여 관계를 알아본다.
n = v1 × v2 = (v1y*v2z - v1z*v2y, v1z*v2x - v1x*v2z, v1x*v2y - v1y*v2x)
n · up > 0
: n과 up이 같은 방향이기 때문에 왼손법칙(왼손좌표계이므로)에 의해서 플레이어가 반시계 방향으로 회전해야한다.
n · up < 0
: n과 up이 다른 방향이기 때문에 왼손법칙(왼손좌표계이므로)에 의해서 플레이어가 시계 방향으로 회전해야한다.