]> git.tdb.fi Git - libs/math.git/blobdiff - source/geometry/hypersphere.h
Make the check_intersection function non-virtual
[libs/math.git] / source / geometry / hypersphere.h
index 35cddd1ac36461f4ee2a0e00122abda491ce3b0a..abdd1939508c2a717f5856fed975da0690226a0a 100644 (file)
@@ -32,7 +32,6 @@ public:
 
        virtual HyperBox<T, D> get_axis_aligned_bounding_box() const;
        virtual bool contains(const LinAl::Vector<T, D> &) const;
-       virtual bool check_intersection(const Ray<T, D> &) const;
        virtual unsigned get_max_ray_intersections() const { return 2; }
        virtual unsigned get_intersections(const Ray<T, D> &, SurfacePoint<T, D> *, unsigned) const;
 };
@@ -66,16 +65,6 @@ inline bool HyperSphere<T, D>::contains(const LinAl::Vector<T, D> &point) const
        return inner_product(point, point)<=radius*radius;
 }
 
-template<typename T, unsigned D>
-inline bool HyperSphere<T, D>::check_intersection(const Ray<T, D> &ray) const
-{
-       T x = inner_product(ray.get_direction(), ray.get_start());
-       if(x>0)
-               return contains(ray.get_start());
-       else
-               return contains(ray.get_start()-ray.get_direction()*x);
-}
-
 template<typename T, unsigned D>
 inline unsigned HyperSphere<T, D>::get_intersections(const Ray<T, D> &ray, SurfacePoint<T, D> *points, unsigned size) const
 {
@@ -89,10 +78,10 @@ inline unsigned HyperSphere<T, D>::get_intersections(const Ray<T, D> &ray, Surfa
        T offset = sqrt(offset_sq);
 
        unsigned n = 0;
-       for(int i=-1; i<=1; i+=2)
+       for(int i=-1; (n<size && i<=1); i+=2)
        {
                T x = mid+offset*i;
-               if(ray.check_limits(x) && n<size)
+               if(ray.check_limits(x))
                {
                        if(points)
                        {
@@ -102,8 +91,6 @@ inline unsigned HyperSphere<T, D>::get_intersections(const Ray<T, D> &ray, Surfa
                        }
 
                        ++n;
-                       if(n==size)
-                               return n;
                }
        }