1. 내적
점곱( dot product ) 또는 내적( inner product )은 스칼라 값을 내는 벡터 곱셈의 일종이다.
결과가 스칼라 값이라서 스칼라 곱( scalar product )이라고 부른다.
u, v 라는 벡터가 있을 때, 두 벡터를 내적하면 아래와 같다.
u dot v = u(x)v(x) + u(y)v(y) + u(z)v(z)
다른 말로 하면 내적은 대응되는 성분들의 곱들의 합이다.
코사인 법칙으로도 다음과 같은 관계를 찾을 수 있다.
u · v = ||u|| ||v|| cosθ
여기서 θ는 벡터 u와 v사이의 각도이며, 0 ≤ θ ≤ π이다. 두 벡터의 내적이 두 벡터사이의 각도의 코사인을 벡터 크기들로 비례시킨 것임을 뜻한다. u.v 둘 다 단위벡터인 경우 u dot v 는 두 벡터 사이의 각도의 코사인이다. ( u dot v = cosθ )
해당 코사인 식으로 아래와 같은 기하학적 속성들을 알 수 있다.
- 만일 u · v = 0이면, u⊥v 이다 ( 두 벡터는 직교한다. )
- 만일 u · v > 0이면, 두 벡터 사이의 각도 θ는 90º보다 작다 ( 두 벡터는 예각이다. )
- 만일 u · v < 0이면, 두 벡터 사이의 각도 θ는 90º보다 크다 ( 두 벡터는 둔각을 이룬다. )

해당 그림1 과 같이 벡터 v와 단위벡터 n이 주어졌을 때, p를 내적을 이용해서 v와 n으로 표현해 보자
해당 그림을 보면, p = kn 을 만족하는 스칼라 k가 존재함을 알 수 있다. 더 나아가서, ||n|| = 1으로 단위벡터라는 특성을 이용하면, 반드시 ||p|| = ||kn|| = |k|||n|| = |k| 이다. 삼각함수 공식을 사용하면, k = ||v||cosθ 임을 알 수 있다.
따라서 p = kn = (||v||cosθ)n이다. 그런데 n은 단위벡터이므로 이를 다음과 같이 표현할 수 있다.

이 공식에 따르면, k = v dot n 이다. 이는 n이 단위벡터일 때의 v dot n의 기하학적 해석을 말해준다.이러한 p를 n에 대한 v의 직교투영(orthogonal projection)이라고 부르는데, 아래와 같이 표기한다.
p = proj_n(v)
해당 직교투영을 통해 단위벡터 n과 v를 내적해서 나온 스칼라 값에 단위벡터 n을 곱하면, p가 단위벡터 방향으로 얼마 만큼 투영되는지 알 수 있다.
v를 하나의 힘으로 간주한다면, p는 힘 v 중에서 방향 n으로 작용하는 부분이라고 할 수 있다. 마찬가지로,
백터 w = perp_n (v) = v - p 는 힘 v 중에서 n의 수직 방향으로 작용하는 부분이다. (이를 perp_n(v)로 표기하고, 여기서 perp는 perpendicular [수직]을 뜻한다.) v = p + w = proj_n(v) + perp_n(v)임을 확인한다. 이는 v를 두 개의 직교벡터 p와 w의 합으로 분해함을 뜻한다. 이는 한 벡터(v)를 기준벡터(n)방향과 그에 직교하는 방향으로 직교분해를 수행하면, v가 p, w 두 개의 벡터로 쪼개져서 나오게 된다.
직교화
벡터들의 집합이 있고, 그 벡터들이 서로 직교이며, 단위 길이라면, 해당 벡터 집합을 정규직교 집합이라고 부른다.
다른 벡터 집합을 직교벡터 집합으로 만드는 것을 직교화(orthogonalization)라고 부른다.
3차원 컴퓨터 그래픽에서 정규직교 집합으로 시작했지만, 정밀도 문제 때문에 집합이 정규직교가 아니게 되는 경우도 존재한다.
다음은 직교로 만들기 위한 과정에 대한 얘기이다. 2차원의 경우, 직교가 되게 하기 위해서 한 예로, 벡터 집합 { v(0), v(1) } 을 다음과 같은 정규직교 집합 { w(0), w(1) }로 만들어 보겠다. 먼저 w(0) = v(0)라고 했을 때, 벡터 v(1)을 w(0)과 직교가 되도록 수정해야 한다. 방법은 v(1)에서 w(0)의 방향으로 작용하는 부분을 빼내는 것이다.

w(1) = v(1) - proj(_w0) (v1)
여기서 proj는 직교투영( orthogonal projection )의 뜻이다.
w0과 v1에 직교투영을 구하고, 그 직교투영과 v1을 빼면 우리가 원하는 직교가 되는 벡터인 w1을 구할 수 있다.
해당 직교가 되는 w0, w1를 정규화 해서 단위 길이로 만들면 정규직교 집합이 완성된다.
3차원은 해당 직교 투영을 2개를 구하여야 한다.
즉, 서로 직교 벡터들의 집합인 w0, w1, w2가 만들어진다.
방법은 위의 2차원 직교화를 통한 과정과 유사하니 그림을 참고하자.

w1 = v1 - proj_w0 (v1)를 구하고, v2를 w0과 w1 모두에게 직교가 되게 만들어야 한다. 방법은 v2에서 w0의 방향으로 작용하는 부분과 w1의 방향으로 작용하는 부분을 빼는 것이다.
w2 = v2 - proj_w0 (v2) - proj_w1 (v2)
이렇게 구하고, w0,w1,w2를 정규화해서 단위 길이로 만들면 정규직교 집합의 완성이다.
일반적으로, n 개의 벡터들의 집합을 직교화 하는 경우에는 그람-슈미트 직교화 (Gram-Schmidt Orthogonalization)이라고 부른다. 해당 직교화 방법은 입력 집합에서 백터 v(i)를 택하고, 그 벡터에서 이미 직교벡터 집합에 들어있는 다른 벡터 ( w(0), w(1) . . . .) 들의 방향으로의 부분을 빼서 그 벡터들과 직교가 되게 만들어서 직교벡터 집합에 추가한다.
그런 과정을 반복해 직교벡터 집합을 완성한 후, 그 집합의 모든 벡터를 정규화한다.
아래 단계를 참고하자.

'DirectX' 카테고리의 다른 글
| DirectX3D) 6. 행렬의 활용(SRT) (0) | 2026.05.09 |
|---|---|
| DirectX3D) 5. 행렬 (0) | 2026.05.05 |
| DirectX3D) 4. Point (0) | 2026.04.30 |
| DirectX3D) 3. 외적 (0) | 2026.04.29 |
| DirectX3D) 1. Vector (3) | 2025.08.25 |