polygon_overlap_area.cpp
2 
4 
5 double PolygonOverlap::PolyArea(vector<Vector2D> const& polygon)
6 {
7  int ntriangles=static_cast<int>(polygon.size())-2;
8  if(ntriangles<1)
9  return 0;
10  double res=0;
11  for(size_t i=0;i<static_cast<size_t>(ntriangles);++i)
12  res+=fabs(CrossProduct(polygon[i+1]-polygon[0],polygon[i+2]
13  -polygon[0]));
14  return 0.5*res;
15 }
16 
17 double PolygonOverlap::polygon_overlap_area(vector<Vector2D> const& ch1,
18  vector<Vector2D> const& ch2,double R0,double R1)
19 {
20  vector<Vector2D> p(ch1),q(ch2);
21  double r[2];
22  int n=static_cast<int>(p.size());
23  boost::random::uniform_real_distribution<> dist(-1,1);
24  for(size_t i=0;i<static_cast<size_t>(n);++i)
25  {
26  r[0]=2*dist(gen)-1;
27  r[1]=2*dist(gen)-1;
28  p[i].Set(p[i].x+r[0]*R0,p[i].y+r[1]*R0);
29  }
30  n=static_cast<int>(q.size());
31  for(size_t i=0;i<static_cast<size_t>(n);++i)
32  {
33  r[0]=2*dist(gen)-1;
34  r[1]=2*dist(gen)-1;
35  q[i].Set(q[i].x+r[0]*R1,q[i].y+r[1]*R1);
36  }
37  vector<Vector2D> poly=ConvexIntersect(p,q);
38  return PolyArea(poly);
39 }
Vector3D CrossProduct(Vector3D const &v1, Vector3D const &v2)
Returns the cross product of two vectors.
Definition: Vector3D.cpp:213
vector< Vector2D > ConvexIntersect(vector< Vector2D > const &poly0, vector< Vector2D > const &poly1)
Calculates the intersection between two convex polygons.
PolygonOverlap(void)
Class constructor.
Calculates the overlap between two polygons.
double PolyArea(vector< Vector2D > const &polygon)
Calcualted the area of a convex polygon.
double polygon_overlap_area(vector< Vector2D > const &ch1, vector< Vector2D > const &ch2, double R0, double R1)
Calculates the area overlaped between two convex polygons.