본문 바로가기
DirectX/[서적] DirectX12를 이용한 3D 게임 프로그래밍 입문

파트1-Chapter-01. 벡터의 내적

by 헛둘이 2022. 10. 18.
내적
  • 내적은 대응되는 성분들의 곱들의 합, 점곱이라고도 부름
  • u*v = (ux*vx) + (uy*vy) + (uz*vz)
  • 크기와 방향을 가지고 있으나 일반적인 곱셈과는 다름
  • 동일 방향 길이의 곱이 벡터 내적이다.
  • 벡터는 방향이라는 값을 가지고 있기 때문에 막 곱할 수 없음
  • 그러니 다른 벡터에서 또 다른벡터에 수선을 내려서 그 성분(cos)만큼 곱하는 것
  • 따라서 아래와 같이 쓸 수 있다.
u*v = |u|*|v|*cos(θ)
  • u, v가 단위벡터일 경우 u*v는 두 벡터 사이 각도의 코사인
  • 중요한 기하학적 속성 3가지
  • 1. u*v = 0이면 u와 v는 직교이다.
  • 2. u*v > 0이면 두 벡터 사이 각도는 90도보다 작다
  • 3. u*v < 0이면 두 벡터 사이 각도는 90도보다 크다

 

예제 1. u와 v사이 각도 구하기

Q. u = (1, 2, 3)이고 v = (-4, 0, -1)일 때 

u * v = (1, 2, 3) * (-4, 0, -1) = -4-3 = -7

||u|| = √1² + 2² + 3² = √14

||v|| = √(-4)² + 0² + (-1)² = √17

cosθ = cos^-1 -7/√14√17 = 117º (코사인의 역함수)

 

예제 2. 벡터 v와 단위벡터 n 내적을 이용해서 p 표현하기
  • p=kn을 만족하는 스칼라 k가 존재함
  • ||n||은 1이므로 반드시 ||p|| = ||kn|| = |k|||n|| = |k|이다. (k는 오직 p와 n이 반대 방향일떄만 음수)
  • 삼각함수 법칙을 적용하면 k = ||v||cosθ가 나옴
  • 따라서 p = kn = (||v||cosθ)n이다. 그런데 n은 단위벡터이므로,
  • p = (||v||cosθ)n = (||v|| * 1cosθ)n = (||v|| ||n||cosθ)n = (v*n)n
  • 이 공식에 따르면 k = v*n이다.
  • 이는 n이 단위벡터일 때 v*n의 기하학적 의미를 말해줌
  • 이러한 p를 n에 대한 v의 직교투영 또는 정사영이라고 부르며 흔히 p = projn(v)라고 표기한다.
  • v를 하나의 힘으로 간주하면 p는 힘 v중에서 방향 n으로 작용하는 부분이라고 볼 수 있다.
  • 이와 비슷하게 벡터 w = perpn(v) = v - p는 힘 v중에서 n의 수직방향으로 작용하는 부분임
  • v = p + w임을 주목해야 함, 즉 v는 직교벡터 p와 w의 합으로 분해된다.
  • n이 단위길이가 아니면 먼저 n을 정규화하면 된다.

댓글