分享

任意多边形的面积公式

 共同成长888 2015-03-25
 

任意多边形的面积公式

 21353人阅读 评论(5) 收藏 举报

设Ω是m边形(如下图),顶点沿边界正向排列,,坐标依次为


建立Ω的多边形区域向量图。

由图知坐标原点与多边形任意相邻的两个顶点构成一个三角形,而三角形的面积可由三个顶点构成的两个平面向量的外积求得。

任意多边形的面积公式


多边形计算公式的计算和原点的选取没有关系,通常可以选点(0,0)或者多边形的第一个点(这个时候比较直观了,看起来就是把多边形分成一个个三角形和加起来,读者自己可以画个图)就可以了。






  1. //任意多边形的面积计算  
  2.   
  3. #include <iostream>  
  4. #include <utility>  
  5. #include <cmath>  
  6. using std::cout;  
  7. using std::cin;  
  8. using std::endl;  
  9.   
  10. typedef std::pair<double ,double> point;  
  11.   
  12. #pragma warning(disable:4244)  
  13.   
  14. double det(point p0,point p1,point p2)  
  15. {  
  16.     return (p1.first-p0.first)*(p2.second-p0.second)-(p1.second-p0.second)*(p2.first-p0.first);  
  17. }  
  18.   
  19. double ploygon_area(int n,point p[])    
  20. {  
  21.     double s=0.0f;  
  22.     int i=1;  
  23.     for(;i < n-1;i++)  
  24.         s += det(p[0],p[i],p[i+1]);  
  25.     return 0.5*fabs(s);  
  26. }  
  27.   
  28. int main(int argc, char *argv[])  
  29. {  
  30.   
  31.     int i,n;  
  32.     double s;  
  33.     point *points = NULL;  
  34.   
  35.     cout<<"Enter the number of edges of the polygon <n>:";  
  36.     cin>>n;  
  37.     if(n < 2){  
  38.         exit(1);  
  39.     }  
  40.   
  41.     points = (point *)malloc(n*sizeof(point));  
  42.   
  43.     for(i=0; i<n; i++){  
  44.         cout<<endl<<"points["<<i<<"]=";  
  45.         cin>>points[i].first>>points[i].second;  
  46.     }  
  47.   
  48.     s=ploygon_area(n, points);  
  49.     cout<<"The area is:"<<s<<std::endl;  
  50.   
  51.     if(points)  
  52.         free(points);  
  53.   
  54.     return 1;  
  55. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多