
namespace CGAL {
/*!

\mainpage User Manual
\anchor Chapter_Bounding_Volumes
\anchor chapBoundingVolumes
\cgalAutoToc
\authors Kaspar Fischer, Bernd G&auml;rtner, Thomas Herrmann, Michael Hoffmann, and Sven Sch&ouml;nherr

\image html ball.png

This chapter describes algorithms which for a given point set compute
the <i>best</i> circumscribing object from a specific
class. If the class consists of all spheres in \f$ d\f$-dimensional
Euclidean space and <i>best</i> is defined as having smallest radius,
then we obtain the smallest enclosing sphere.



\section SectBoundingIntroduction Introduction

Bounding volumes can be used to obtain simple approximations of
complicated objects. For example, consider the problem of deciding
whether two moving polygons currently intersect. An obvious solution
is to discretize time and perform a full intersection test for any
time step. If the polygons are far apart most of the time, this is
unnecessary. Instead, simple bounding volumes (for examples, circles)
are computed for both polygons at their initial positions. At
subsequent time steps, an intersection test between the moving
bounding circles replaces the actual intersection test; only if the
circles do intersect, the expensive intersection test between the
polygons is performed. In practice, bounding volume hierarchies are
often used on top of simple bounding volumes to approximate
complicated objects more accurately.

Bounding volumes are also frequently applied to extract
geometric properties of objects. For example, the smallest enclosing
annulus of a point set can be used to test whether a set of points is
approximately cospherical. Here, the width of the annulus (or its
area, or still another criterion that we use) is a good measure for
this property.

\section SectBoundingSphere Bounding Spheres in dD

We provide the class `Min_sphere_of_spheres_d<Traits>` for arbitrary dimensions
to compute the smallest enclosing spheres for points as well as for spheres.
The dimension as well as the input type depend on the chosen traits class.

The following example is for 2D points

\cgalExample{Min_circle_2/min_circle_2.cpp}

The example for 2D circles as input looks rather similar.


\cgalExample{Min_sphere_of_spheres_d/min_sphere_of_spheres_d_2.cpp}



\subsection  SectBoundingSphereHomogeneous Bounding Spheres for the Homogeneous Kernel

In the previous section we saw that we used `Min_sphere_of_spheres_d`
to compute the smallest circle for points. This package also provides
the classes `Min_circle_2` and `Min_sphere_d`, but they are slower,
and they should only be used in case of homogeneous coordinates which
are not supported by `Min_sphere_of_spheres_d`.

In the following example a smallest enclosing circle
(`Min_circle_2<Traits>`) is constructed from points
on a line and written to standard output. The example
shows that it is advisable to switch on random shuffling
in order to deal with a <i>bad</i> order of the input points.

\cgalExample{Min_circle_2/min_circle_homogeneous_2.cpp}


\section SectBoundingAnnulus Bounding Annulus in dD

We provide the class `Min_annulus_d<Traits>` for arbitrary dimensions
to compute the smallest enclosing annulus for a set of points.
In 2D the annulus consists of two concentric circles, in 3D of
two concentric spheres.

\image html annulus.png




\section SectBounding2D Various Bounding Areas in 2D

Other classes for which we provide solutions are ellipses
(`Min_ellipse_2<Traits>`), rectangles
(`min_rectangle_2()`), parallelograms
(`min_parallelogram_2()`) and strips (`min_strip_2()`)
in the plane, with appropriate optimality criteria.


\section SectBoundingEllipsoid Approximate Bounding Ellipsoid in dD

While this package provides an exact smallest 2D ellipse, it also
provides the class `Approximate_min_ellipsoid_d<Traits>` to compute
an approximate minimum-volume enclosing ellipsoid with user-specified
approximation ratio.




\section SectBoundingPcenter Rectangular P-Center

Bounding volumes also define geometric "center points" of objects.
For example, if two objects are to be matched (approximately), one
approach is to first apply the translation that maps the centers of
their smallest enclosing spheres onto each other. Simpler centers are
possible, of course (center of gravity, center of bounding box), but
more advanced bounding volumes might give better results in some
cases. It can also make sense to consider several center points
instead of just one. For example, we provide algorithms to cover a
planar point set with between two and four minimal boxes
(`rectangular_p_center_2()`). Below is an example covering with
three boxes; the center points are shown in red.

\image html pcenter.png

*/
} /* namespace CGAL */
