DirectX

DirectX3D) 3. 외적

minkg3532 2026. 4. 29. 16:40

다른 종류의 벡터 곱셈으로 가위곱(cross product) 또는 외적(outer product)이라는 것이 있다.

해당 외적의 결과값은 벡터값이 나온다. 또한 외적은 오직 3차원 벡터에 대해서만 정의된다. ( 2차원 벡터의 외적이란 것은 존재하지 않는다. )

두 3차원 벡터 u와 v의 외적을 취하면, u와 v모두에 직교인 또 다른 벡터 w가 나온다.

즉, w는 u와 직교이고 v와도 직교이다. 아래 그림은, 외적의 정의가 되겠다.

 

왼손 엄지 법칙으로 따졌을 때, 해당 엄지방향이 (( w )) (( = u )) x (( v ))의 방향이 된다.

만약 오른손잡이 좌표계를 다루는 경우에는, 오른손 엄지 법칙을 따라야 한다. 해당 경우에도 엄지방향이 외적으로 나온 벡터의 방향이 된다.

 

외적의 특징

  • 외적은 교환법칙이 성립하지 않는다. (( u )) x (( v ))와 (( v )) x (( u ))는 다르다.
  • (( u )) x (( v )) (( =  -( v )) x (( u ) ))은 가능하다. 
  • 외적으로 얻은 벡터가 어느 방향인지는 좌표계에 따라 해당 엄지 법칙을 따른다. 
  • w가 u의 직교인지, v의 직교인지 확인하는 방법은 u · v = 0 으로 비교해서 직교인지 확인할 수 있다.

 

2차원 유사 외적 

 

하나의 2차원 벡터 ((u = ( u_{x}, u_{y})))가 주어졌을 때, 3차원 외적과 유사하게 u에 수직인 벡터 v를 구하는 것은 가능하다.

해당 그림을 보자.  

 

v = (( -u_{y}, u_{x}))임을 알 수 있는데, 아래 공식을 확인해 보자. 

해당 공식을 바탕으로 u ⊥ v 이다. 또한 ((u · -v = u_{x}u_{y} + u_{y}(-u_{x}) = 0))이라는 점도 주목해보자. 따라서,  u ⊥ -v이기도 하다.

 

외적을 이용한 직교화

이전에 다뤘던 그람-슈미트 직교화 공정을 이용해서 벡터 집합을 직교화하는 방법을 알아봤는데, 여기서 3차원 공간에서 정규직교에 아주 가깝지만, 수치 정밀도 오차의 누적 때문에 완전한 정규직교는 아닌 벡터 집합  { (( v_{0}, v_{1}, v_{2} )) }를 외적을 이용해서 직교화하는 또 다른 방법이 존재한다. 아래 그림을 참고하자

외적을 이용한 3차원 직교화

살짝 어긋난 세 축인 해당 (( v_{0} )) , (( v_{1}  )) , (( v_{2} )) 을 완전히 90도 직교하는 단위 벡터인  (( w_{0} )) , (( w_{1}  )) , (( w_{2} )) 로 되돌리는 과정이다. 

3D에서는 두 벡터를 외적하면 단번에 수직인 벡터를 얻을 수 있다는 특징이 있으므로, 내적과 투영 연산( 직교 투영 - (( proj_{n}(v) )) )을 여러 번 거칠 필요 없이 외적 두 번만으로 기저 벡터(Basis Vector)를 직교화할 수 있다.

 

아래는 해당 직교화 단계를 보여준다.

  1. $ w_{0} = \frac{v_{0}}{\|v_{0}\|} $으로 설정한다. ( (( v_{0} ))의 방향은 그대로 두고 길이만 1로 맞춰 기준축 (( w_{0} ))를 만든다.
  2. $ w_{2} = \frac{w_{0} \times v_{1}}{\|w_{0} \times v_{1}\|} $으로 설정한다. 이전 단계에서 만들어준 축 $w_0$(Forward)와 두 번째 벡터 $v_1$(Up)을 외적(Cross Product)한다. 외적의 기하학적 특성상, 두 벡터가 이루는 평면에 완벽히 수직인 3번째 축 $w_2$(Right)가 나오게 됨. 이것의 길이를 1로 정규화한다.
  3. $w_1 = w_2 \times w_0$으로 설정한다.  $w_{2} \perp w_{0}$이고, $\|w_{2}\| = \|w_{0}\| = 1$ 이므로 $\|w_{2} \times w_{0}\| = 1$ 이다. 따라서 마지막 단계에서 벡터를 정규화할 필요는 없다. (연습문제 14참고)

이 과정을 마치고 나면, 벡터집합 { $w_{0}, w_{1}, w_{2}$ }는 정규직교 집합이다.

 

 

'DirectX' 카테고리의 다른 글

DirectX3D) 6. 행렬의 활용(SRT)  (0) 2026.05.09
DirectX3D) 5. 행렬  (0) 2026.05.05
DirectX3D) 4. Point  (0) 2026.04.30
DirectX3D) 2. 내적  (4) 2025.08.25
DirectX3D) 1. Vector  (3) 2025.08.25