행렬 0x0B: 벡터의 외적 (Cross Product)

벡터의 외적 (Cross Product)

3차원 벡터의 외적은 두 3차원 벡터가 이루는 평면에 수직인 새로운 벡터를 생성하는 연산이다.

3차원 벡터 $ A, B $의 외적은 다음과 같이 정의된다.

\[A = \begin{pmatrix} A_x \\ A_y \\ A_z \end{pmatrix}\] \[B = \begin{pmatrix} B_x \\ B_y \\ B_z \end{pmatrix}\] \[C = A \times B = \begin{pmatrix} C_x \\ C_y \\ C_z \end{pmatrix}\]

이 때, $ C $의 성분은 다음과 같다.

\[C_x = A_y B_z - A_z B_y\] \[C_y = A_z B_x - A_x B_z\] \[C_z = A_x B_y - A_y B_x\]

유용한 특성

  • $ C $는 $ A, B $와 모두 수직인 벡터이다.
  • $ C $의 길이(유클라디안 노름)는 $ A, B $가 이루는 평행사변형의 면적과 같다.
\[\|\mathbf{A} \times \mathbf{B}\| = \|\mathbf{A}\| \|\mathbf{B}\| \sin \theta\]
  • 교환법칙이 성립하지 않고, 다음과 같은 반대 성질이 있다.
\[A \times B = -(B \times A)\]

C++ 코드

template<class K, u64 N>
Vector<K, 3> Vector<K, N>::CrossProduct(const Vector<K, 3>& lhs, const Vector<K, 3>& rhs)
{
    return {
        lhs[1] * rhs[2] - lhs[2] * rhs[1],
        lhs[2] * rhs[0] - lhs[0] * rhs[2],
        lhs[0] * rhs[1] - lhs[1] * rhs[0],
    };
}

Categories:

Updated:

Leave a comment