일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Input Assembler
- DirectX
- 다이렉트X 튜토리얼
- C언어
- 동기화
- engine
- Direct3D Init
- Direct Init
- View
- swapchain
- 다중표본화
- 전처리문
- CPU
- 다이렉트X
- DirectXTK
- DirectX12
- C++
- CommandList
- 프로그래밍
- RenderTargetView
- 다이렉트 초기화
- UE4
- 게임수학
- 세팅
- Direct3D
- c
- vertex
- DESC
- GPU
- 코딩
- Today
- Total
비타Cpp
외적 (Outer Product / Cross Product) 본문
외적은 내적과 달리 벡터를 결괏값으로 가지는 연산이며, 외적은 오직 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가 포함된 평면상의 직교인 벡터가 나온다.
특별한 경우를 제외하고는 2차원에서는 두 벡터에 수직인 벡터가 존재하지 않는다. 그러나 하나의 2차원 벡터 u=(ux, uy)에 수직인 벡터 v는 얼마든지 구할 수 있으며, 그런 벡터가 유용하게 쓰일 수 있다. 이러한 2차원 유사 외적(Pseudo 2D Cross Product)을 아래 그림처럼 나타낸다.
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 |