1 /*
2 * 计算多边形面积(利用向量叉乘)
3 */
4
5 struct Point { // 点结构体
6 int x, y;
7 };
8
9
10 // 点的叉乘: AB * AC
11 int cross(const Point &A, const Point &B, const Point &C) {
12 return (B.x - A.x) * (C.y - A.y) - (B.y - A.y) * (C.x - A.x);
13 }
14
15 /*
16 * 计算多边形面积
17 * 参数:n个顶点, 多边形顶点坐标集合
18 */
19 double polygon_area(const int &n, Point p[])
20 {
21 double area = 0.0;
22 int i;
23 Point temp;
24
25 temp.x = temp.y = 0;//原点
26 for (i = 0; i < n-1; ++i)
27 {
28 area += cross(temp, p[i], p[i+1]);
29 }
30 area += cross(temp, p[n-1], p[0]);//首尾相连
31 area = area/2.0; //注意要除以2
32 return area > 0 ? area : -area; //返回非负数
33 }