Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 인접한 두 변의 벡터를 이용해 삼각형 넓이 구하기

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