Exemplo n.º 1
0
//returns the number of resulting intervals
//if 1, returns it in p
//if 2, returns them in p and q
int IntervalSubtract(const ClosedInterval& a,const OpenInterval& b,ClosedInterval& p,ClosedInterval& q)
{
  if(a.intersects(b)) {
    if(a.contains(b.a) && a.contains(b.b)) {
      p.a=a.a; p.b=b.a;
      q.a=b.b; q.b=a.b;
      return 2;
    }
    else if(a.contains(b.a)) {
      p.a=a.a; p.b=b.a;
      return 1;
    }
    else if(a.contains(b.b)) {
      p.a=b.b; p.b=a.b;
      return 1;
    }
    else {
      Assert(b.contains(a.a) && b.contains(a.b));
      return 0;
    }
  }
  else {
    p=a;
    return 1;
  }
}
Exemplo n.º 2
0
bool HollowBall::containsSphere(const Sphere3D& s) const
{
  Real d = s.center.distance(center);
  ClosedInterval i;
  i.a = Max(innerRadius,Zero);
  i.b = outerRadius;
  return i.contains(d-s.radius) && i.contains(d+s.radius);
}
Exemplo n.º 3
0
bool ConvexPolyhedron3D::planeSplits(const Plane3D& p) const
{
	ClosedInterval x;
	x.setEmpty();
	Real vpos;
	for(int i=0; i<numVertices; i++)
	{
		vpos = p.distance(vertices[i]);
		x.expand(vpos);

		if(x.contains(Zero))
			return true;
	}

	return false;
}