일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다이렉트X 튜토리얼
- swapchain
- 코딩
- C언어
- Direct Init
- DirectXTK
- Direct3D
- DESC
- GPU
- RenderTargetView
- c
- engine
- 동기화
- View
- 전처리문
- Input Assembler
- UE4
- Direct3D Init
- vertex
- 게임수학
- CommandList
- CPU
- DirectX
- 다중표본화
- DirectX12
- 다이렉트 초기화
- 세팅
- 다이렉트X
- 프로그래밍
- C++
- Today
- Total
비타Cpp
내적과 직교 투영 본문
점곱(dot product)이라고도 부르는 내적(inner product)은 스칼라값을 내는 벡터 곱셈의 일종이다.
u = (ux, uy, uz)이고, v = (vx, vy, vz)라고 했을때, 내적은 다음과 같이 정의된다.
u · v = uxvx + uyvy + uzvz
다른 말로하면 "내적은 대응되는 성분들의 곱들의 합" 이다.
내적의 기하학적 의미는 코사인 법칙을 적용해보면 알수 있다.
u · v = ||u|| ||v|| cosθ
θ는 두 벡터 u, v 사이의 0≤θ≤π를 만족하는 각도이다. 따라서 위 식은 두 벡터의 내적이 두 벡터 사이의 각도의 코사인을 벡터 크기로 비례한 것임을 뜻한다. 특히 u,v 둘다 단위 벡터일 때 경우 u · v는 두벡터 사이의 각도의 코사인이다. 이를 통해 내적의 유용한 기하학적 속성 몇가지를 이끌어낼 수 있다.
1. u · v = 0 이면, u ⊥ v 이다. (두 벡터는 수직이다.)
2. u · v > 0 이면, 두 벡터 사이의 각도 θ는 90도보다 작다. (두 벡터는 예각을 이룬다.)
3. u · v < 0 이면, 두 벡터 사이의 각도 θ는 90도보다 크다. (두 벡터는 둔각을 이룬다.)
그리고 또한 내적을 이용하여 구할 수 있는 아주 중요한 기하학적 개념이 더있다.
바로 직교 투영이다.
위의 그림에서 벡터 v와 단위 벡터 n이 주어졌을 때 p를 내적을 이용해서 v와 n으로 표현해보자.
우선 그림을 보면 p = kn을 만족하는 스칼라 k가 존재함을 알 수 있다.
더 나아가, ||n||은 1이므로, 반드시 ||p|| = ||kn|| = |k| ||n|| = |k| 이다.
삼각함수 법칙을 적용하면
cosθ = k / ||v||
k = ||v|| cosθ 가 나온다.
따라서 p = kn = (||v|| cosθ) n이다. 그런데 n은 단위 벡터 이므로,
p = (||v|| cosθ) n = (||v|| * 1 * cosθ) n = (||v|| ||n|| cosθ) n = (v · n) n
이 공식에 따르면 k = v · n 이다. 이는 n이 단위벡터일 때 v· n의 기하학적 의미를 말해준다.
이러한 p를 n에 대한 v의 직교투영(orthographic projection; 또는 정사영)이라고 부르며, 흔히 다음과 같이 표기 한다.
P = projn(v)
v벡터를 하나의 힘으로 간주 한다면 p는 힘v 중에서 n방향으로 작용하는 부분이라고 이해하면 쉽다.
이와 비슷하게, 벡터w = prepn(v) = v - p는 힘v 중에서 n의 수직 방향으로 작용하는 부분이다.(prep는 perpendicular[수직]를 뜻한다.)
여기서 v = p + w임을 주목해야 한다. 즉, v는 두 직교 벡터 p와 w의 합으로 분해된다.
n이 단위 벡터가 아니면 먼저 n을 정규화 한다음 투영공식을 대입하면된다. 이로써 좀더 일반적인 투영공식이 나온다.
p = projn(v) = (v · n/||n||) * n/||n|| = (v · n)/||n||2 * n
'DirectX12 > 게임 수학' 카테고리의 다른 글
원점을 기준으로 회전하는 카메라 (0) | 2021.10.17 |
---|---|
행렬식(Determinant) (0) | 2021.08.05 |
비례(Scaling) 행렬 (0) | 2021.08.02 |
외적 (Outer Product / Cross Product) (0) | 2021.08.01 |
직교화(Orthogonalization) (0) | 2021.07.28 |