摘:向量叉乘_计算多边形面积_算法模板

 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 }
posted @ 2012-07-06 20:26  川川.aug  阅读(411)  评论(0编辑  收藏  举报