이 프로그램에서는 다각형의 넓이를 구하는 것이 목표입니다. 다각형을 이루는 각 꼭짓점의 좌표가 주어지며, 이 좌표들을 이용해 넓이를 계산하게 됩니다. 본격적인 내용에 들어가기에 앞서, 뒤에서 설명할 개념을 더 쉽게 이해할 수 있도록 기본 용어부터 간단히 정리하고 시작하겠습니다.
기본 개념 정리
넓이(면적)란 2차원 도형이 차지하는 크기를 수치로 나타낸 값입니다.
다각형(Polygon)은 주어진 개수의 변으로 둘러싸인 닫힌 도형을 의미합니다.
꼭짓점의 좌표는 2차원 평면 위에 있는 점의 위치 값을 말합니다. 예를 들어 (0, 0)처럼 표현합니다.
그럼 이제 다각형의 넓이를 구하는 수학적 공식을 살펴보겠습니다.
넓이 계산 공식
아래 공식은 좌표평면 위의 다각형 넓이를 구하는 데 널리 쓰이는 신발끈 공식(Shoelace Formula), 즉 가우스의 면적 공식입니다.
Area = ½ [(x₁y₂ + x₂y₃ + …… + x₍ₙ₋₁₎yₙ + xₙy₁) − (x₂y₁ + x₃y₂ + …… + xₙy₍ₙ₋₁₎ + x₁yₙ)]
각 꼭짓점의 x좌표와 y좌표를 교차하여 곱한 뒤 차이를 구하고, 절반을 취하면 다각형의 넓이를 얻을 수 있습니다. 이 공식을 활용하면 임의의 볼록·오목 다각형 모두 정확하게 계산할 수 있습니다.
C++ 구현 예제
다음은 위 공식을 C++ 코드로 구현한 예제입니다.
#include <iostream>
#include <math.h>
using namespace std;
double areaOfPolygon(double x[], double y[], int n){
double area = 0.0;
int j = n - 1;
for (int i = 0; i < n; i++){
area += (x[j] + x[i]) * (y[j] - y[i]);
j = i;
}
return abs(area / 2.0);
}
int main(){
double X[] = {0, 1, 4, 8};
double Y[] = {0, 2, 5, 9};
int n = sizeof(X)/sizeof(X[0]);
cout<<"The area is "<<areaOfPolygon(X, Y, n);
}
코드 설명
areaOfPolygon 함수는 x좌표 배열, y좌표 배열, 그리고 꼭짓점의 개수 n을 매개변수로 받습니다. 반복문 안에서 현재 꼭짓점 i와 이전 꼭짓점 j의 좌표를 교차 곱셈하여 누적합을 계산하고, 마지막에 절반을 곱한 뒤 abs() 함수로 절댓값을 반환합니다. 이렇게 하면 꼭짓점이 시계 방향으로 주어졌는지, 반시계 방향으로 주어졌는지에 관계없이 항상 양수인 넓이를 얻을 수 있습니다.
실행 결과
The area is 3.5
위 예제에서는 좌표 (0,0), (1,2), (4,5), (8,9)를 꼭짓점으로 가지는 다각형의 넓이가 3.5로 계산되었습니다. 이처럼 신발끈 공식을 활용하면 꼭짓점 좌표만으로도 다각형의 넓이를 간단하고 정확하게 구할 수 있습니다.