수식
활용
- 두 벡터에 수직인 벡터를 구할 수 있다.
- 두 벡터가 이루는 평행사변형의 넓이를 구할 수 있다.
- 회전 방향을 판정할 수 있다. (시계 방향 / 반시계 방향)
- 법선 벡터(Normal Vector)를 계산할 수 있다.
원리
두 벡터에 수직인 벡터 구하기
에 따르면 두 벡터의 외적은 A벡터의 크기 * B벡터의 크기 * 두 벡터 사잇각의 사인 * 단위 법선 벡터이다.
여기서 은 A와 B 두 벡터에 모두 수직인 단위 벡터이다. 외적의 결과는 두 입력 벡터에 모두 수직인 벡터가 된다.
Vector A, B;
Vector perpendicular = Cross( A, B );
perpendicular.Normalize(); // 단위 법선 벡터로 만들기의사 코드로 표현한 두 벡터에 수직인 벡터를 구하는 방법이다.
오른손 법칙 (Right-Hand Rule)
외적의 방향은 오른손 법칙을 따른다:
- 오른손 검지를 첫 번째 벡터 A 방향으로 향하게 한다.
- 중지를 두 번째 벡터 B 방향으로 향하게 한다.
- 엄지가 가리키는 방향이 A × B의 방향이다.
주의: B × A = -(A × B) 외적은 교환법칙이 성립하지 않는다.
평행사변형의 넓이 구하기
외적의 크기는 두 벡터가 이루는 평행사변형의 넓이와 같다. 따라서 삼각형의 넓이는 외적 크기의 절반이 된다.
Vector A, B;
Vector crossProduct = Cross( A, B );
float parallelogramArea = crossProduct.Length();
float triangleArea = parallelogramArea * 0.5f;의사 코드로 표현한 평행사변형과 삼각형 넓이를 구하는 방법이다.
회전 방향 판정
2D 평면에서 벡터 A에서 벡터 B로의 회전 방향을 판정할 수 있다.
Vector2D A, B;
// Z축 성분만 계산 (2D에서는 X, Y가 0)
float crossZ = A.x * B.y - A.y * B.x;
if ( crossZ > 0 )
{
// 반시계 방향 (Counter-Clockwise)
}
else if ( crossZ < 0 )
{
// 시계 방향 (Clockwise)
}
else
{
// 평행 (Parallel)
}특성
교환법칙 불성립
분배법칙 성립
자기 자신과의 외적은 0
평행한 벡터의 외적은 0