Compute intersection area of two polygons with cgal

匿名 (未验证) 提交于 2019-12-03 01:00:01

问题:

Given the vertices of two convex polygons, what is the simplest way of computing the area of their intersection using cgal?

回答1:

Because you are working with convex polygons, there is no need to worry about holes. So the simplest code that I can think of is basically construct the polygons, call intersection, loop over intersection and total up the area::

#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;  } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!