说明
我们假定得到了按照逆时针顺序给出的 n 个顶点的坐标(x1, y1, x2, y2… xn, yn)且坐标均为整数。
那么最简洁的方法就是计算向量叉积(其实也是算行列式)来求,对凹多边形也适用。直观的理解是将多边形分为了若干个小三角形分别求面积。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(void)
{
int n, i, x[101], y[101];
double sum;
while(cin >> n && n){
for (i = 0; i < n; ++i)
cin >> x[i] >> y[i];
sum = 0;
for (i = 0; i < n - 1; ++i)
sum += (x[i] * y[i + 1] - x[i + 1] * y[i]);
sum = (fabs(sum + x[i] * y[0] - x[0] * y[i])) * 1.0 / 2;
printf("%.1f\n", sum);
}
}