+
+ return n;
+}
+
+template<typename T, unsigned D>
+inline Coverage HyperSphere<T, D>::get_coverage(const BoundingBox<T, D> &bbox) const
+{
+ const LinAl::Vector<T, D> &min_pt = bbox.get_minimum_point();
+ const LinAl::Vector<T, D> &max_pt = bbox.get_maximum_point();
+
+ LinAl::Vector<T, D> far_point;
+ for(unsigned i=0; i<D; ++i)
+ far_point[i] = std::max(std::abs(min_pt[i]), std::abs(max_pt[i]));
+
+ if(contains(far_point))
+ return FULL_COVERAGE;
+
+ unsigned spanned_dimensions = 0;
+ for(unsigned i=0; i<D; ++i)
+ if(min_pt[i]<T(0) && max_pt[i]>T(0))
+ spanned_dimensions |= 1<<i;
+
+ for(unsigned i=0; i<(1<<D); ++i)
+ {
+ if(i&spanned_dimensions)
+ continue;
+
+ LinAl::Vector<T, D> point;
+ for(unsigned j=0; j<D; ++j)
+ if(!((spanned_dimensions>>j)&1))
+ point[j] = ((i>>j)&1 ? max_pt[j] : min_pt[j]);
+
+ if(contains(point))
+ return PARTIAL_COVERAGE;
+ }
+
+ return NO_COVERAGE;