평행사변형의 인접한 두 변에 해당하는 두 벡터가 x̂i + ŷj + ẑk 형태로 주어져 있다고 가정해 봅시다. 이때 우리가 해야 할 일은 바로 평행사변형의 면적을 구하는 것입니다.
기하학적으로 중요한 사실은, 평행사변형의 면적은 두 벡터의 외적(cross product)의 크기(|A × B|)와 같다는 점입니다. 따라서 복잡한 기하 계산 없이도 벡터 연산만으로 면적을 손쉽게 구할 수 있습니다.
벡터 A = x1̂i + y1̂j + z1̂k 와 벡터 B = x2̂i + y2̂j + z2̂k 가 주어졌을 때, 외적의 크기는 다음 공식으로 계산됩니다.
$$\rvert \vec{A}\times\vec{B}\rvert=\sqrt{\lgroup y_{1}*z_{2}-y_{2}*z_{1}\rgroup^{2}+\lgroup x_{1}*z_{2}-x_{2}*z_{1}\rgroup^{2}+\lgroup x_{1}*y_{2}-x_{2}*y_{1}\rgroup^{2}}$$
이 공식은 각 성분별 외적 결과인 (y1z2 − y2z1), (x1z2 − x2z1), (x1y2 − x2y1)을 제곱하여 더한 뒤 제곱근을 취하는 방식입니다.
C++ 구현 예제
아래 코드는 두 벡터를 배열로 입력받아 위 공식을 그대로 적용해 면적을 반환하는 함수입니다.
#include<iostream>
#include<cmath>
using namespace std;
float area(float A[], float B[]) {
float area = sqrt(pow((A[1] * B[2] - B[1] * A[2]),2) + pow((A[0] * B[2] - B[0] * A[2]),2) + pow((A[0] * B[1] - B[0] * A[1]),2));
return area;
}
int main() {
float A[] = {3, 1, -2};
float B[] = {1, -3, 4};
float a = area(A, B);
cout << "Area = " << a;
}실행 결과
Area = 17.3205
벡터 A = {3, 1, -2}와 벡터 B = {1, -3, 4}의 외적을 계산하면 각 성분은 다음과 같습니다.
- i 성분: (1 × 4) − (-3 × -2) = 4 − 6 = -2
- j 성분: (3 × 4) − (1 × -2) = 12 + 2 = 14
- k 성분: (3 × -3) − (1 × 1) = -9 − 1 = -10
이 값들의 크기를 구하면 √((-2)² + 14² + (-10)²) = √(4 + 196 + 100) = √300 ≈ 17.3205이므로, 프로그램의 출력 결과와 일치함을 확인할 수 있습니다.