X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgeometry%2Fhalfspace.h;h=09ec62ce600b9258b1044a0113a61251f5c424aa;hb=a29d2c17ca70a3ed5df1e863c92ccd851d5dba6b;hp=b439851bd5adaf3a7067c7f91f5bf8308bb01166;hpb=7de28b9c89ca4554f5c12746f481f5b385529479;p=libs%2Fmath.git diff --git a/source/geometry/halfspace.h b/source/geometry/halfspace.h index b439851..09ec62c 100644 --- a/source/geometry/halfspace.h +++ b/source/geometry/halfspace.h @@ -28,6 +28,7 @@ public: virtual bool contains(const LinAl::Vector &) const; virtual unsigned get_max_ray_intersections() const { return 1; } virtual unsigned get_intersections(const Ray &, SurfacePoint *, unsigned) const; + virtual Coverage get_coverage(const BoundingBox &) const; }; template @@ -85,6 +86,25 @@ inline unsigned HalfSpace::get_intersections(const Ray &ray, Surface return 0; } +template +inline Coverage HalfSpace::get_coverage(const BoundingBox &bbox) const +{ + LinAl::Vector low_point; + LinAl::Vector high_point; + for(unsigned i=0; i=T(0) ? bbox.get_minimum_coordinate(i) : bbox.get_maximum_coordinate(i)); + high_point[i] = (normal[i]>=T(0) ? bbox.get_maximum_coordinate(i) : bbox.get_minimum_coordinate(i)); + } + + if(contains(high_point)) + return FULL_COVERAGE; + else if(contains(low_point)) + return PARTIAL_COVERAGE; + else + return NO_COVERAGE; +} + } // namespace Geometry } // namespace Msp