计算多边形面积就是通过拆分三角形的方法,即为选取任意一个点,从该点出发,连接多边形的每一个顶点,这样就将多边形分为了许多个三角形。计算每一个三角形的面积即可,用叉积计算的每一个三角形的面积为"有向面积",直接将所有三角形的有向面积相加,结果的绝对值就是多边形的面积。
#define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<cmath> const double EPS = 1e-8; const int N = 301; using namespace std; struct Point{ Point(double l = 0, double r = 0) :x(l), y(r){}; double x, y; }; Point operator-(Point a, Point b){ return Point(a.x - b.x, a.y - b.y); } double Cross(Point p0, Point p1, Point p2){ Point a = p1 - p0; Point b = p2 - p0; return a.x*b.y - b.x*a.y; } int n; Point P[N]; double ans; int main(){ int i; Point P0; while (scanf("%d", &n) && n){ ans = 0; for (i = 0; i < n; i++) scanf("%lf%lf", &P[i].x, &P[i].y); P[n++] = P[0]; for (i = 0; i < n - 1; i++){ ans += Cross(P0, P[i], P[i + 1]); } ans = abs(ans / 2); printf("%.1lf\n", ans); } return 0; }
时间: 2024-10-29 19:12:16