3차원 공간에서 삼각형의 인접한 두 변을 나타내는 벡터가 각각 xî + yĵ + zk̂ 형태로 주어졌다고 가정해 보겠습니다. 이 글에서는 C++를 사용하여 이 두 벡터로부터 삼각형의 넓이를 구하는 방법을 알아보겠습니다.
수학적 원리
두 벡터가 삼각형의 인접한 두 변이라면, 삼각형의 넓이는 두 벡터의 외적(cross product) 크기의 절반과 같습니다. 외적의 결과는 두 벡터 모두에 수직인 새로운 벡터이며, 그 크기(|A × B|)는 두 벡터가 이루는 평행사변형의 넓이에 해당합니다. 따라서 여기에 ½를 곱하면 삼각형의 넓이를 얻을 수 있습니다.
$$\frac{1}{2}\rvert \vec{A}\times\vec{B}\rvert=\frac{1}{2}\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}}$$
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*0.5;
}
int main() {
float A[] = {3, 1, -2};
float B[] = {1, -3, 4};
float a = area(A, B);
cout << "Area = " << a;
}코드 설명
area 함수는 두 벡터 A와 B를 float 배열로 전달받습니다. 각 배열의 요소는 벡터의 x, y, z 성분을 순서대로 나타냅니다(A[0]은 x 성분, A[1]은 y 성분, A[2]는 z 성분). 함수 내부에서는 위의 외적 공식에 따라 세 성분별 차이를 각각 제곱한 후 더하고, 제곱근을 취해 외적의 크기를 계산합니다. 마지막으로 0.5를 곱해 삼각형의 넓이를 반환합니다.
실행 결과
Area = 8.66025