计算几何-计算多边形面积(模板)

来源:互联网 发布:js childnodes方法 编辑:程序博客网 时间:2024/05/10 11:50

 提起平面多边形,最容易想到的就是三角形了。对于简单的三角形面积问题大家一定不陌生!其中就编程而言,精确度最高的当属通过叉积(也称内积)来求解。那么是不是平面多边形也可以通过将多边形分割成一个个的三角形进而求解呢?

      回答是肯定的,以梯形ABCD为例,S梯形ABCD=S三角形ABC+S三角形ACD  。

       同样对于多边形来说我们也可以通过同样的分割三角形法来实现多边形面积的求解。但是,我们需要做一下排序的预处理。算法执行如下:

      将多边形的所有顶点按逆时针排序(避免叉积求三角形面积时符号的正负上出问题)。假定排序后的顶点序列为V0,V1,V2,V3,...,Vi,...Vn,那么多边形的面积就是Sigma(S三角形V0ViV(i+1)),其中1<=i<n-1。

      确定一个顶点,然后遍历其他所有的边(每条边有两个点,这样就构成了三个点一个三角形,从而计算出每一块三角形的面积)

[c-sharp] view plain copy
  1. //顶点存储   
  2. typedef struct Node{  
  3.      double x,y;  
  4. }Point;  
  5. Point p[101];  

[c-sharp] view plain copy
  1. //结合叉积求多边形面积   
  2. double cross(Point a,Point b,Point o){  
  3.     return (a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y);  
  4. }  
  5.   
  6. double area(int n){  
  7.     double res=0.0;  
  8.     for(int i=0;i<n-1;i++)  
  9.        res+=cross(p[i],p[i+1],p[0]);  
  10.     return res/2.0;  
  11. }