→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.
■ 벡터의 외적(Cross product)
벡터의 외적(Cross product)은 내적과 달리 오로지 3차원 공간의 벡터에만 사용 가능한 연산이다.
벡터의 외적은 $\times$기호를 사용하며, 두 3차원 벡터 $\vec u, \vec v$의 외적 결과는 아래와 같다.
$$ \vec u = (u_x, u_y, u_z) \ \ \ \vec v = (v_x, v_y, v_z) \\ \vec u \times \vec v = (u_yv_z - v_yu_z, u_zv_x -v_xu_z,u_xv_y -v_xu_y) $$
[두 벡터의 외적 결과]
- 두 3차원 벡터의 외적 결과는 언제나 3차원 벡터이다.
- 계산식 패턴은 $x$성분의 결과를 만들기 위해 관련없는 나머지 두 성분 $y,z$를 결합해 만든다.
| 내적 | 외적 | |
| 계산 결과 | 스칼라 | 벡터 |
| 교환 법칙 | 성립함 | 성립하지 않음 |
| 결합 법칙 | 성립하지 않음 | 성립하지 않음 |
| 분배 법칙 | 성립함 | 성립함 |
[벡터의 내적과 외적의 차이]
$$ \vec u \times \vec v \ne \vec v \times \vec u \\ \vec u \times \vec v = -\vec v \times \vec u $$
외적은 뺄셈을 사용하기 때문에 교환법칙이 성립하진 않지만, 두 순서를 바꿔 계산하면 반대 방향의 벡터가 나온다.
$$ \vec u\times(\vec v \times \vec w) \ne (\vec u\times\vec v) \times \vec w \\ \vec u\times(\vec v +\vec w) = \vec u \times \vec v + \vec u \times \vec w $$
또한 외적은 결합법칙이 성립하지 않지만, 덧셈에 대한 분배 법칙은 성립한다.
내적은 같은 위치의 요소만 사용하고, 외적은 다른 위치의 요소만 사용하기 때문에 각 연산이 가지는 부족한 부분을 상호보완하는 기능으로 활용된다.
■ 외적의 성질
1. 평행성 판별
동일한 벡터를 내적하면 벡터 크기를 제곱한 결과가 나오는데, 동일한 벡터를 “외적”하는 경우는 어떤 결과가 나오는지 확인해 보자.
$$ \vec{u} \times \vec{u}= (u_y u_z - u_y u_z,\; u_z u_x - u_z u_x,\; u_x u_y - u_x u_y)= (0,\; 0,\; 0) $$
[동일한 벡터의 외적]
임의의 벡터$\vec u = (u_x, u_y, u_z)$로 설정하고 동일한 벡터를 외적 하면 그 결과는 항상 영벡터가 나온다.
$$ \vec{u} \times -\vec{u}= (-u_y u_z + u_y u_z,\; -u_z u_x + u_z u_x,\; -u_x u_y + u_x u_y)= (0,\; 0,\; 0) $$
[반대 방향의 외적]
$\vec u$와 반대 방향을 가진 벡터 $-\vec u$의 결과 역시 그 결과는 항상 영벡터가 나온다.
$$ \vec{u} \times \vec{v}= (k u_y u_z - k u_y u_z,\; k u_z u_x - k u_z u_x,\; k u_x u_y - k u_x u_y) $$
[크기가 다른 평행반 벡터의 외적]
$\vec u$와 평행하지만 크기가 다른 벡터 $\vec v = k\cdot\vec u$를 외적 한 결과도 역시 영벡터가 나온다.
- 이러한 외적의 성질로 인해 내적과 반대로 두 벡터의 평행성을 판별하는 데 사용된다.

외적의 성질을 알아보기 위해 $\vec u$를 $\vec v$에 수평인 벡터$(\vec{u}{\parallel})$와 $\vec v$에 수직인 벡터$(\vec{u}{\perp})$로 분리해 보자.
그렇다면 벡터 $\vec u$는 $\vec{u} = \vec{u}{\parallel} + \vec{u}{\perp}$로 표현할 수 있다. 이제 이 상태에서 두 벡터를 외적 해보자.
$$ \vec v\times \vec u = \vec v\times(\vec{u}{\parallel} + \vec{u}{\perp}) \\ = \vec v\times\vec{u}{\parallel} + \vec v\times \vec{u}{\perp} $$
여기서 벡터 $\vec v$와 평행한 벡터 $\vec{u}_{\parallel}$의 외적 결과는 항상 영벡터가 되므로, 위 식은 아래와 같이 간단하게 정리된다.
$$ \vec v\times \vec u = \vec v \times \vec{u}_{\perp} $$
- 따라서 외적은 어떤 벡터에 직교하는 벡터 성분만 사용되는 성질이 존재한다.
🤔 어떤 벡터 $\vec u$가 임의의 벡터 $\vec v$에 수직인 성분, 수평인 성분으로 이루어질 수 있는 이유는 뭔가요?
$$ \vec{u} = \vec{u}{\parallel} + \vec{u}{\perp} $$
- $\vec{u}_{\parallel}$ : 벡터 $\vec v$에 평행한 성분.
- $\vec{u}_{\perp}$ : 벡터 $\vec v$에 수직인 성분.
3차원 공간에서 임의의 벡터는 다른 한 벡터를 기준으로 한 평면 위에서 항상 “평행 방향 + 수직 방향”의 조합으로 표현되기 때문이다.
- 더 자세한 내용은 해당 참고 : https://hate-errorlog.tistory.com/36
[게임수학] 6-2. 투영 벡터, Vector3.ProjectOnPlane()
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.■ 투영 벡터벡터의 투영이란, 투영할 벡터$(\vec v)$ 가 기준 벡터$(\vec u)$ 방향으로 얼마나 기여하는지를 나타내는 벡터를 구하는
hate-errorlog.tistory.com

두 개의 벡터$(\vec v, \vec u)$가 있을 때, 벡터$\vec u$를 $\vec v$에 대해 직교(수직) 방향으로 분해한 성분$(\vec{u}_{\perp})$의 크기는 두 벡터가 이루는 사잇각$\theta$에 비례한다.
이는 삼각함수 관계에서,
$$ \sin\theta = \frac{수직\ 성분의\ 길이}{|\vec u|} $$
로 정의되는데, 이는 곧 외적의 크기가 $\sin$함수에 비례한다는 의미이다. 이를 확인해 보기 위해 아래 3가지 식을 전개하여 확인해 보자.
🤔 수직 성분의 제곱. $(|\vec u \times \vec v|)^2$
$$ \begin{align*} \|\vec{u} \times \vec{v}\|^2 &= (\vec{u} \times \vec{v}) \cdot (\vec{u} \times \vec{v}) \\ &= (u_y v_z - u_z v_y)^2 + (u_z v_x - u_x v_z)^2 + (u_x v_y - u_y v_x)^2 \\ &= u_y^2 v_z^2 - 2u_y u_z v_y v_z + u_z^2 v_y^2u_z^2 v_x^2 - 2u_z u_x v_z v_x + u_x^2 v_z^2 \\ &\quad + u_x^2 v_y^2 - 2u_x u_y v_x v_y + u_y^2 v_x^2 \end{align*} $$
🤔 평행 성분의 제곱. $(|\vec u||\vec v|)^2$
$$ \begin{align*}(|\vec{u}||\vec{v}|)^2 &= \left( \sqrt{u_x^2 + u_y^2 + u_z^2} \sqrt{v_x^2 + v_y^2 + v_z^2} \right)^2 \\&= (u_x^2 + u_y^2 + u_z^2)(v_x^2 + v_y^2 + v_z^2) \\&= u_x^2 v_x^2 + u_x^2 v_y^2 + u_x^2 v_z^2 + u_y^2 v_x^2 + u_y^2 v_y^2 + u_y^2 v_z^2 + u_z^2 v_x^2 + u_z^2 v_y^2 + u_z^2 v_z^2\end{align*} $$
🤔 전체 성분의 제곱. $(\vec u\cdot \vec v)^2$
$$ \begin{align*}(\vec{u} \cdot \vec{v})^2 &= (u_x v_x + u_y v_y + u_z v_z)^2 \\&= u_x^2 v_x^2 + u_y^2 v_y^2 + u_z^2 v_z^2 + 2u_x u_y v_x v_y + 2u_x u_z v_x v_z + 2u_y u_z v_y v_z\end{align*} $$
위 3개의 식 결과를 비교하면, 다음과 같은 관계를 가지는 것을 알 수 있다.
$$ |\vec u \times \vec v|^2 = (|\vec u||\vec v|)^2 - (\vec u \cdot \vec v)^2 $$
[식 - 1]
어디서 많이 본 수식 아닌가? 이 수식의 형태를 쫌만 바꿔보면,
$$ (\vec u \cdot \vec v)^2 = (|\vec u||\vec v|)^2 + (|\vec u \times \vec v|^2) $$
즉, 전체 성분의 제곱 = 수평 성분의 제곱 + 수직 성분의 제곱인 피타고라스 정리의 벡터 버전이 만들어진다.
위 [식 - 1]의 내적$\vec u\cdot \vec v$를 코사인 공식으로 바꿔 전개해 보면 아래와 같이 된다.


이로써 벡터 외적의 크기는 $\sin$ 함수에 비례함을 알 수 있다. 그리고 외적으로 생성된 벡터의 크기는 위와 같이 두 벡터가 만드는 평행사변형의 넓이로 나타낼 수 있다.
- 행렬식이 만들어내는 넓이와 동일.
❓외적과 내적의 차이
| 구분 | 내적 | 외적 |
| 결과 | 스칼라(숫자) | 벡터(3차원) |
| 의미 | 두 벡터가 얼마나 같은 방향인지 (평행 성분) | 두 벡터가 얼마나 수직으로 벌어져 있는지 (직교 성분) |
| 삼각함수 | $\cos\theta$ | $\sin\theta$ |
2. 법선 벡터
$$ \vec{u} \times \vec{v}= \left(u_y v_z - v_y u_z,\;u_z v_x - v_z u_x,\;u_x v_y - v_x u_y\right) $$
두 벡터의 외적 결과에, $\vec u$와 $\vec v$를 내적 하면 다음과 같은 결과가 나온다.

두 벡터에 대한 내적 결과가 모두 0이니, 외적의 결과는 두 벡터에 모두 직교한다는 것을 알 수 있다.
- 따라서 두 벡터가 만들어내는 평면이 “향하는 방향”에 대한 벡터를 만들어내는 것으로 해석할 수 있다.

점 3개$(P_1, P_2, P_3)$를 결합해 만든 평면에서 $P_2 - P_1 = \vec u, \ P_3 - P_1 = \vec v$ 이 두 벡터를 외적 하면, 세 점이 만들어내는 평면에 직교하는 벡터가 생성된다.
- 이는 평면이 향하는 방향을 나타내며 이 벡터를 법선 벡터, 또는 노말 벡터라고 한다.
- 외적은 교환법칙이 성립하지 않아, 왼손/오른손 법칙에 따라 외적의 연산 순서에 신경 써야 한다.
3. 좌우 판별

플레이어의 시선 방향$(\vec f)$에서, 좌측에 있는 물체로 향하는 벡터$(\vec v)$를 외적 하면, 왼손 법칙에 따라 평면의 아래쪽을 향한다.
반대로 물체가 시선 방향의 우측에 있다면, 평면의 위쪽을 향한다.
- 이러한 외적의 특징을 사용하여 물체가 시선 방향을 기준으로 좌측에 있는지, 오른쪽에 있는지를 판별할 수 있다.
다만, 외적의 결과는 벡터이므로 참과 거짓을 구별할 수 있도록 내적을 사용하여 스칼라로 변환하면 된다.
- 내적에 사용되는 벡터는 월드의 y축 사용. (Vector3.Up)
| 물체의 위치 | 판별식 값 |
| 물체가 시선 방향에서 왼쪽에 있는 경우 | $(\vec f \times \vec v) \cdot \vec y <0$ |
| 물체가 시선 방향에서 우측에 있는 경우 | $(\vec f \times \vec v) \cdot \vec y >0$ |
public class CrossPorduct : MonoBehaviour
{
[SerializeField] private RotateAround target;
private void Update()
{
var forward = transform.forward;
var dir = (target.transform.position - transform.position).normalized;
var cross = Vector3.Cross(forward, dir);
var dot = Vector3.Dot(cross, Vector3.up);
if (dot > 0)
{
// 우측에 존재
}
else
{
// 좌측에 존재
}
}
}
[외적을 사용하여 좌/우를 판별하는 코드]

$\sin$함수에 비례하는 외적의 성질에 기인한다고 할 수 있다. 반면 내적은 $\cos$함수에 비례하기 때문에 앞뒤 방향 판별에 사용된다.
'게임수학' 카테고리의 다른 글
| [게임수학] 9-3. 외적(3) - 삼중곱 (0) | 2025.11.11 |
|---|---|
| [게임수학] 9-2. 외적(2) - 카메라의 회전 행렬, 로드리게스 공식 (0) | 2025.11.11 |
| [게임수학] 8-2. 오일러 각의 단점(짐벌락, 회전 보간) (0) | 2025.10.14 |
| [게임수학] 8-1. 오일러 각(Euler's angle) (0) | 2025.10.14 |
| [게임수학] 7. 게임 엔진 (0) | 2025.09.24 |