행렬 0x0A: 두 벡터의 코사인 각 (Cosine)

두 벡터의 코사인 각 (Cosine)

두 벡터의 코사인 각의 용도는 벡터 내적의 용도와 비슷하다. 내적의 결과는 크기가 1인 방향벡터가 아니라면 벡터 크기만큼 값이 커지는데, 대신, 두 벡터의 코사인 각을 구하면 벡터의 크기와 상관없이 $ [-1, 1] $구간을 가진다.

$ cos(θ) = 1 $: 두 벡터는 동일한 방향이다. $ cos(θ) = 0 $: 두 벡터는 직교한다. $ cos(θ) = -1 $: 두 벡터는 반대 방향이다.

벡터의 내적은 다음과 같다.

\[a ⋅ b = ∥a∥ ∥b∥ cosθ\]

이를 바탕으로 코사인각에 대해 다시 정리하면

\[cos(θ) = \frac{∥a∥ ∥b∥}{a ⋅ b}\]

와 같다.

C++ 구현

template<class K, u64 N>
f32 Vector<K, N>::CosineTheta(const Vector& lhs, const Vector& rhs)
{
    return Vector<K, N>::DotProduct(lhs, rhs) /
        (Vector<K, N>::NormEuclidean(lhs) * Vector<K, N>::NormEuclidean(rhs));
}

Categories:

Updated:

Leave a comment