비타Cpp

외적 (Outer Product / Cross Product) 본문

DirectX12/게임 수학

외적 (Outer Product / Cross Product)

멍C 2021. 8. 1. 10:51

외적은 내적과 달리 벡터를 결괏값으로 가지는 연산이며, 외적은 오직 3차원 벡터에 대해서만 정의된다.

두 3차원 벡터 u와 v의 외적을 취하면 u와 v에 모두 직교인 벡터 w가 나온다. u = (ux, uy, uz), v=(vx, vy, vz)라고 할 때, 둘의 외적은 다음과 같이 정의된다.


w = u × v = (uyvz - uzvy, uzvx - uxvz, uxvy - uyvx)


잠시 예를 들어보자.

u = (2, 1, 3) , v = (2, 0, 0) 일 때, w = u × v와 z = v × u를 계산해보자.

 

w = u × v

   = (2, 1, 3) × (2, 0, 0)

   = (1*0 - 3*0 , 3*2 - 2*0 , 2*0 - 1*2)

   = (0, 6, -2)

 

z = v × u

  = (2, 0, 0) × (2, 1, 3) 

  = (0*3 - 0*1, 0*2 - 2*3, 2*1 - 0*2)

  = (0, -6, 2)

 

이렇게 서로 다른 결과가 나온다. 이로써 외적은 "교환 법칙"이 성립하지 않는다.

u × v ≠ v × u 이므로 이에 대한 역 u × v = - v × u이라는 점도 증명된다.

 

외적을 통해서 나오는 벡터는 기하학적으로 벡터 u, v가 포함된 평면상의 직교인 벡터가 나온다.

 

u, v 를 모두 직교하는 벡터 w가 외적의 결과다.

특별한 경우를 제외하고는 2차원에서는 두 벡터에 수직인 벡터가 존재하지 않는다. 그러나 하나의 2차원 벡터 u=(ux, uy)에 수직인 벡터 v는 얼마든지 구할 수 있으며, 그런 벡터가 유용하게 쓰일 수 있다. 이러한 2차원 유사 외적(Pseudo 2D Cross Product)을 아래 그림처럼 나타낸다.

 

벡터 u의 2차원 유사 외적을 구하면 u에 직교인 v가 나온다.

 

2차원 유사 외적은 벡터 u = (ux, uy) 에 대하여 v = (-uy, ux)이다. 이를 증명하는 방법은 u, v의 내적이 0이 나온다면 직교한다는 점을 이용하면 된다.

 

$$u\cdot v=(u_x,u_y)\cdot(-u_y, u_x)=-u_xu_y + u_yu_x = 0$$

 

이므로 u ⊥v 이다. 마찬가지로 u · -v도 직교라는 점도 알고 있어야 한다.

 

 

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

원점을 기준으로 회전하는 카메라  (0) 2021.10.17
행렬식(Determinant)  (0) 2021.08.05
비례(Scaling) 행렬  (0) 2021.08.02
직교화(Orthogonalization)  (0) 2021.07.28
내적과 직교 투영  (0) 2021.07.28
Comments