3

2つの凸多角形の頂点を考えると、cgalを使用してそれらの交差の面積を計算する最も簡単な方法は何ですか?

4

1 に答える 1

5

凸多角形で作業​​しているので、穴を気にする必要はありません。したがって、私が考えることができる最も単純なコードは、基本的にポリゴンを作成し、交差点を呼び出し、交差点をループして、面積を合計することです。

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

}
于 2012-05-08T17:35:49.543 に答える