[게임수학] 9-3. 외적(3) - 삼중곱

2025. 11. 11. 19:37·게임수학
728x90

→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.

■ 삼중곱

벡터의 외적과 내적을 두 번 연속 사용하는 연산을 삼중곱(Triple product)이라 한다.

삼중곱 식을 세우려면 3개의 벡터$(\vec u, \vec v, \vec w)$ 가 필요하며, 순서에 따라 다음과 같은 경우의 수가 생긴다.

  1. $\vec u\cdot(\vec v \cdot \vec w)$
  2. $\vec u\cdot(\vec v \times \vec w)$
  3. $\vec u \times (\vec v\cdot \vec w)$
  4. $\vec u \times (\vec v\times \vec w)$

이 중, 1번 연산은 괄호 안의 내적 값은 스칼라가 되어 벡터를 세 번 곱했다고 보기 어렵고, 3번 연산은 벡터와 스칼라의 외적은 불가능하다.

  • 따라서 2번과 4번 연산만이 유효한 삼중곱 연산이 된다.

 

1. 스칼라 삼중곱

2번 연산을 4번 연산과 구분하기 위해 별도로 스칼라 삼중곱(Scalar triple product)라 부른다.

물체가 좌/우에 있는지 판별할 때 사용한 식$\vec y \cdot (\vec f \times \vec v)$이 바로 스칼라 삼중곱이다.

[외적의 크기 / 법선 벡터에 투영한 벡터의 크기]

임의의 벡터 $\vec u$의 크기를 법선 벡터 $\vec v \times \vec w$에 수직으로 투영한 벡터의 높이는 $\cos$$\theta$에 비례한다.

 

그렇다면 높이 $|\vec u| \cos\theta$에 평행사변형의 넓이 $|\vec v \times \vec w|$를 곱하면, 아래처럼 육면체의 부피가 나온다.

[육면체의 부피]

$$ |\vec u||\vec v \times\vec w|\cos\theta = |\vec u \cdot (\vec v \times \vec w)| $$

이는 스칼라 삼중곱이 만들어내는 값의 절대값과 동일하다.

  • 따라서 스칼라 삼중곱의 절댓값은 세 벡터가 만드는 평행육면체의 부피를 의미한다.

[순서를 바꾼 스칼라 삼중곱 예시]

세 벡터 중 바닥을 향하는 두 벡터를 변경해도 최종 육면체의 부피 값은 변하지 않으므로, 삼중곱의 결과는 동일하다.

$$ \vec{u} \cdot (\vec{v} \times \vec{w}) = \vec{v} \cdot (\vec{w} \times \vec{u}) = \vec{w} \cdot (\vec{u} \times \vec{v}) $$

[세 벡터의 선형 독립 확인]

스칼라 삼중곱은 세 벡터가 모두 선형 독립인지 판별하는데 사용된다.

삼중곱의 값이 0이 나오는 경우는, 평면을 이루는 두 벡터$(\vec v, \vec w)$가 평행이거나, (b)와 같이 두 벡터가 만드는 평면에 벡터 $\vec u$가 속하는 경우이다.

  • (a)의 경우 평행한 두 벡터를 외적하므로 영벡터가 되고, 최종적으로 스칼라 삼중곱 값은 0이 된다.
  • (b)의 경우 $\vec v \times \vec w$로 만들어진 법선 벡터와 $\vec u$는 직교하므로 이의 내적은 0이 된다.

즉, 스칼라 삼중곱이 0이 아니면 세 벡터는 모두 선형 독립의 관계를 가짐을 알 수 있다.

 

2. 벡터 삼중곱

세 벡터의 외적으로 구성된 삼중곱 $\vec u \times (\vec v \times \vec w)$을 벡터 삼중곱(Vector triple product)이라 하는데, 벡터 삼중곱은 다음과 같은 성질을 지닌다.

$$ \vec u \times (\vec v \times \vec w) = (\vec u \cdot \vec w) \cdot \vec v - (\vec u \cdot \vec v) \cdot \vec w $$

[식 - 1]

  • 이를 삼중곱 전개(Triple product expansion) 또는 라그랑주 공식(Lagrange’s formula)이라 한다.

[식 -1] 의 좌변의 식의 최종 연산은 외적이므로 이의 결과는 벡터로 나온다. 이때 최종 벡터의 $x$성분만 먼저 전개해 보자.

 

먼저, $\vec v\times\vec w$의 외적을 계산하는 식은 아래와 같다.

$$ \vec{v} \times \vec{w} = (v_y w_z - w_y v_z,\; v_z w_x - w_z v_x,\; v_x w_y - w_x v_y) $$

여기서 외적의 $x$ 요소에는 $\vec u$ 벡터와 $(\vec v \times \vec w)$벡터의 y, z 성분만 사용된다. 이때 만들어지는 $x$성분을 전개해 보면,

$$ (\vec{u} \times (\vec{v} \times \vec{w}))_x = u_y (v_x w_y - w_x v_y) - (v_z w_x - w_z v_x) u_z \\= v_x (u_y w_y + u_z w_z) - w_x (u_y v_y + u_z v_z) \\ = v_x (u_y w_y + u_z w_z) - w_x (u_y v_y + u_z v_z) + v_x u_x w_x - v_x u_x w_x\\= v_x (u_x w_x + u_y w_y + u_z w_z) - w_x (u_x v_x + u_y v_y + u_z v_z) \\= v_x (\vec{u} \cdot \vec{w}) - w_x (\vec{u} \cdot \vec{v}) $$

나머지 2개의 성분도 동일한 방식으로 전개할 수 있으며, 이 결과를 정리하면 아래와 같다.

$$ (\vec{u} \times (\vec{v} \times \vec{w}))_y = v_y (\vec{u} \cdot \vec{w}) - w_y (\vec{u} \cdot \vec{v})\\ (\vec{u} \times (\vec{v} \times \vec{w}))_z = v_z (\vec{u} \cdot \vec{w}) - w_z (\vec{u} \cdot \vec{v}) $$

위 식을 종합하면 최종적으로 식-1 이 유도되는 것을 알 수 있다.

[벡터 삼중곱으로 만들어진 벡터 결과]

벡터 삼중곱은 다소 복잡한 외적을 두 개의 내적 연산으로 변환한다는 특징을 지닌다. 이 식의 우변은 결국 $a\vec v + b \vec w$와 같은 선형 결합식이므로, 벡터 삼중곱으로 만들어지는 벡터는, 두 벡터$(\vec v, \vec w)$가 만드는 평면에 속한다.

 

2차원 평면 위의 직교 벡터를 생성하는 벡터 삼중곱 연산

2차원 평면의 벡터 $\vec u$와 동일한 평면에 위치한 임의의 벡터 $\vec v$가 주어졌을 때, 동일 평면에서 벡터 $\vec u$와 직교하는 벡터는 $(\vec u \times \vec v)\times \vec u$의 벡터 삼중곱을 사용해 구할 수 있다.

728x90

'게임수학' 카테고리의 다른 글

[게임수학] 9-2. 외적(2) - 카메라의 회전 행렬, 로드리게스 공식  (0) 2025.11.11
[게임수학] 9-1. 외적(Cross product)  (0) 2025.11.11
[게임수학] 8-2. 오일러 각의 단점(짐벌락, 회전 보간)  (0) 2025.10.14
[게임수학] 8-1. 오일러 각(Euler's angle)  (0) 2025.10.14
[게임수학] 7. 게임 엔진  (0) 2025.09.24
'게임수학' 카테고리의 다른 글
  • [게임수학] 9-2. 외적(2) - 카메라의 회전 행렬, 로드리게스 공식
  • [게임수학] 9-1. 외적(Cross product)
  • [게임수학] 8-2. 오일러 각의 단점(짐벌락, 회전 보간)
  • [게임수학] 8-1. 오일러 각(Euler's angle)
브라더스톤
브라더스톤
유티니, C#과 관련한 여러 정보를 끄적여둔 블로그입니다. Email : dkavmdk98@gmail.com
  • 브라더스톤
    젊은 프로그래머의 슬픔
    브라더스톤
  • 전체
    오늘
    어제
    • 개발 노트 (49)
      • Unity,C# (30)
        • Unity 정보 (7)
        • 알고리즘 (11)
        • 자료구조 (3)
        • 절차적생성(PCG) (9)
      • 게임수학 (14)
      • C++ (5)
        • 자료구조 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    절차적지형생성
    PerlinNoise
    게임수학
    C#
    최단경로찾기
    unity
    transform.RotateAround
    이진공간분할
    UI Toolkit
    정렬알고리즘
    스택
    CustomWindow
    알고리즘
    Quaternion.AngleAxis
    자료구조
    BSP
    절차적던전생성
    pcg
    외적
    커스텀 윈도우
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
브라더스톤
[게임수학] 9-3. 외적(3) - 삼중곱
상단으로

티스토리툴바