bool Geometric2DCollection::Collides(const Triangle2D& tri) const
{
  for(size_t i=0;i<aabbs.size();i++) {
    Box2D box; box.set(aabbs[i]);
    if(box.intersects(tri)) return true;
  }
  for(size_t i=0;i<boxes.size();i++)
    if(boxes[i].intersects(tri)) return true;
  for(size_t i=0;i<circles.size();i++)
    if(tri.closestPoint(circles[i].center).distanceSquared(circles[i].center) < Sqr(circles[i].radius)) return true;
  for(size_t i=0;i<triangles.size();i++)
    if(tri.intersects(triangles[i])) return true;
  return false;
}
bool Geometric2DCSpace::ObstacleOverlap(const Triangle2D& tri) const
{
  AABB2D bb;
  tri.getAABB(bb);
  if(!domain.contains(bb)) return true;
  return Geometric2DCollection::Collides(tri);
}
示例#3
0
bool intersect2d::aabb_triangle(const AABB_2D &aabb, const Triangle2D &tri) {
	//First check if any of the triangles corners is in the aabb:
	if(aabb.contains(tri.p1) || aabb.contains(tri.p2) || aabb.contains(tri.p3)) return true;

	//Then if any of the aabb corners are in the triangle
	for(const glm::vec2 & c: aabb.corners()) {
		if(tri.contains(c)) return true;
	}

	//Then test if any lines intersect:
	return	aabb_line(aabb, Line2D(tri.p1, tri.p2)) ||
					aabb_line(aabb, Line2D(tri.p2, tri.p3)) ||
					aabb_line(aabb, Line2D(tri.p3, tri.p1));

}
bool Geometric2DCollection::Collides(const Triangle2D& t,int obstacle) const
{
  Type type=ObstacleType(obstacle);
  int index = ObstacleIndex(obstacle);
  switch(type) {
  case AABB:
    {
      Box2D box; box.set(aabbs[index]);
      return box.intersects(t);
    }
  case Triangle:
    return triangles[index].intersects(t);
  case Box:
    return boxes[index].intersects(t);
  case Circle:
    {
      return (t.closestPoint(circles[index].center).distanceSquared(circles[index].center) < Sqr(circles[index].radius));
    }
  }
  abort();
  return false;
}
示例#5
0
/***********************************************************
	test if inside triangle
***********************************************************/
bool Point2D::is_inside (const Triangle2D & t) const
{
    return t.contains (*this);
}