【问题标题】:Compute intersection area of two polygons with cgal用cgal计算两个多边形的交集面积
【发布时间】:2012-05-08 16:34:52
【问题描述】:

给定两个凸多边形的顶点,使用 cgal 计算它们相交面积的最简单方法是什么?

【问题讨论】:

    标签: c++ computational-geometry cgal


    【解决方案1】:

    因为您使用的是凸多边形,所以无需担心孔洞。所以我能想到的最简单的代码基本上就是构造多边形,调用交叉点,循环交叉点并合计面积::

    #include <iostream>
    #include <CGAL/Simple_cartesian.h>
    #include <CGAL/Polygon_2.h>
    #include <CGAL/Polygon_with_holes_2.h>
    #include <CGAL/Boolean_set_operations_2.h>
    #include <CGAL/Polygon_2_algorithms.h>
    
    
    typedef CGAL::Simple_cartesian<double> K;
    typedef K::Point_2 Point;
    typedef CGAL::Polygon_2<K> Polygon_2;
    typedef CGAL::Polygon_with_holes_2<K> Polygon_with_holes_2;
    using std::cout; using std::endl;
    
    
    int main(){
      Point points[] = { Point(0,0), Point(1,0), Point(1,1), Point(0,1)};
      Point points2[] = { Point(0.5,0.5), Point(1.5,0.5), Point(1.5,1.5), Point(0.5,1.5)};
      Polygon_2 poly1(points, points+4);
      Polygon_2 poly2(points2, points2+4);
      //CGAL::General_polygon_with_holes_2<K> poly3;
      std::list<Polygon_with_holes_2> polyI;
    
      CGAL::intersection(poly1, poly2, std::back_inserter(polyI));
    
      double totalArea = 0;
      typedef std::list<Polygon_with_holes_2>::iterator LIT;
      for(LIT lit = polyI.begin(); lit!=polyI.end(); lit++){
        totalArea+=lit->outer_boundary().area();
      }
      cout << "TotalArea::" << totalArea;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 2013-11-13
      • 2012-01-26
      • 2012-04-07
      • 2013-10-24
      • 2013-07-22
      • 1970-01-01
      相关资源
      最近更新 更多