이 문제에서 각 한 다각형의 꼭짓점 좌표들이 입력으로 주어진다. 이때의 다각형의 넓이는 어떻게 구할 수 있을까?
먼저, 다각형은 삼각형들의 합으로 구할 수 있고, 삼각형의 넓이는 이며, 외적을 통해 구해줄 수 있다.
하지만, 이 문제의 입력은 2차원 좌표이기 때문에, 외적하면 z좌표만 남게 되고 이것의 절댓값이 외적의 크기가 된다.
, 일 때,
가 된다.
하지만, 는 이므로, 임을 확인할 수 있다.
따라서, 임이 유도된다.
벡터를 편하게 구하기 위해서, 입력으로 들어오는 첫번째 좌표를 기준으로 벡터를 구성해 문제를 해결해보자.
#include <bits/stdc++.h>
#define X first
#define Y second
using namespace std;
int n;
pair<double, double> coords[10000];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout << fixed;
cout.precision(1);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> coords[i].X >> coords[i].Y;
}
double area = 0;
for (int i = 1; i < n - 1; i++) {
pair<double, double> u = {coords[i].X - coords[0].X, coords[i].Y - coords[0].Y};
pair<double, double> v = {coords[i + 1].X - coords[0].X, coords[i + 1].Y - coords[0].Y};
area += (u.X * v.Y - u.Y * v.X) / 2.0;
}
cout << abs(area);
}