diff --git a/Bounding_volumes/doc/Bounding_volumes/Bounding_volumes.txt b/Bounding_volumes/doc/Bounding_volumes/Bounding_volumes.txt
index 55116f807f7..dd52a223038 100644
--- a/Bounding_volumes/doc/Bounding_volumes/Bounding_volumes.txt
+++ b/Bounding_volumes/doc/Bounding_volumes/Bounding_volumes.txt
@@ -9,37 +9,16 @@ namespace CGAL {
\authors Kaspar Fischer, Bernd Gärtner, Thomas Herrmann, Michael Hoffmann, and Sven Schönherr
\image html ball.png
-\image latex ball.png
This chapter describes algorithms which for a given point set compute
the best circumscribing object from a specific
class. If the class consists of all spheres in \f$ d\f$-dimensional
Euclidean space and best is defined as having smallest radius,
-then we obtain the smallest enclosing sphere problem already mentioned
-above.
+then we obtain the smallest enclosing sphere.
-In the following example a smallest enclosing circle
-(`Min_circle_2`) 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 bad order of the input points.
-\cgalExample{Min_circle_2/min_circle_2.cpp}
-Other classes for which we provide solutions are ellipses
-(`Min_ellipse_2`), rectangles
-(`min_rectangle_2()`), parallelograms
-(`min_parallelogram_2()`) and strips (`min_strip_2()`)
-in the plane, with appropriate optimality criteria. For arbitrary
-dimensions we provide smallest enclosing spheres for points
-(`Min_sphere_d`) and spheres for spheres
-(`Min_sphere_of_spheres_d`), smallest enclosing
-annuli (`Min_annulus_d`), and approximate
-minimum-volume enclosing ellipsoid with user-specified
-approximation ratio (`Approximate_min_ellipsoid_d`).
-
-\image html annulus.png
-\image latex annulus.png
+\section SectBoundingIntroduction Introduction
Bounding volumes can be used to obtain simple approximations of
complicated objects. For example, consider the problem of deciding
@@ -60,13 +39,74 @@ 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. The largest area triangle is for example used in
-heuristics for matching archaeological aerial photographs. Largest
-perimeter triangles are used in scoring cross country soaring flights,
-where the goal is basically to fly as far as possible, but still
-return to the departure airfield. To score simply based on the total
-distance flown is not a good measure, since circling in thermals
-allows to increase it easily.
+this property.
+
+\section SectBoundingSphere Bounding Spheres in dD
+
+We provide the class `Min_sphere_of_spheres_d` 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`) 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 bad 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` for arbitrary dimensions
+to compute the smalles 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`), 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` 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
@@ -81,8 +121,6 @@ planar point set with between two and four minimal boxes
three boxes; the center points are shown in red.
\image html pcenter.png
-\image latex pcenter.png
*/
} /* namespace CGAL */
-
diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h
index 46fe14ad267..8f33d597b83 100644
--- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h
+++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h
@@ -191,7 +191,7 @@ to iterate over the %Cartesian coordinates of the direction of a fixed
axis of the computed ellipsoid, see
`axis_direction_cartesian_begin()`.
*/
-typedef unspecified_type Axis_direction_iterator;
+typedef unspecified_type Axes_direction_coordinate_iterator;
/// @}
diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_annulus_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_annulus_d.h
index 71cd4b1bf73..6c4a6e03ace 100644
--- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_annulus_d.h
+++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_annulus_d.h
@@ -24,17 +24,17 @@ The underlying algorithm can cope with all kinds of input, e.g. \f$ P\f$ may be
empty or points may occur more than once. The algorithm computes a support
set \f$ S\f$ which remains fixed until the next set, insert, or clear operation.
-\tparam Traits must be a model for `OptimisationDTraits`.
+\tparam Traits must be a model for `MinSphereAnnulusDTraits`.
-We provide the models `Optimisation_d_traits_2`,
-`Optimisation_d_traits_3`, and `Optimisation_d_traits_d` using the
+We provide the models `Min_sphere_annulus_d_traits_2`,
+`Min_sphere_annulus_d_traits_3`, and `Min_sphere_annulus_d_traits_d` using the
two-, three-, and \f$ d\f$-dimensional \cgal kernel, respectively.
\sa `CGAL::Min_sphere_d`
-\sa `CGAL::Optimisation_d_traits_2`
-\sa `CGAL::Optimisation_d_traits_3`
-\sa `CGAL::Optimisation_d_traits_d`
-\sa `OptimisationDTraits`
+\sa `CGAL::Min_sphere_annulus_d_traits_2`
+\sa `CGAL::Min_sphere_annulus_d_traits_3`
+\sa `CGAL::Min_sphere_annulus_d_traits_d`
+\sa `MinSphereAnnulusDTraits`
\cgalHeading{Implementation}
diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2.h
index 9e7d6900a2f..c2b373057f8 100644
--- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2.h
+++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2.h
@@ -23,9 +23,9 @@ The underlying algorithm can cope with all kinds of input, e.g. \f$ P\f$ may be
empty or points may occur more than once. The algorithm computes a support
set \f$ S\f$ which remains fixed until the next insert or clear operation.
-Please note: This class is (almost) obsolete. The class
+\note This class is (almost) obsolete. The class
`CGAL::Min_sphere_of_spheres_d` solves a more general problem
-and is faster then `Min_circle_2` even if used only for points in two
+and is faster than `Min_circle_2` even if used only for points in two
dimensions as input. Most importantly,
`CGAL::Min_sphere_of_spheres_d` has
a specialized implementation for floating-point arithmetic which
diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_d.h
index 61511c5aee6..ca5a9956ea5 100644
--- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_d.h
+++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_d.h
@@ -22,9 +22,9 @@ The algorithm
computes a support set \f$ S\f$ which remains fixed until the next insert
or clear operation.
-Please note: This class is (almost) obsolete. The class
+\note This class is (almost) obsolete. The class
`CGAL::Min_sphere_of_spheres_d` solves a more general problem
-and is faster then `Min_sphere_d` even if used only for points
+and is faster than `Min_sphere_d` even if used only for points
as input. Most importantly, `CGAL::Min_sphere_of_spheres_d` has
a specialized implementation for floating-point arithmetic which
ensures correct results in a large number of cases (including
@@ -38,17 +38,17 @@ divide.
\tparam Traits must be a model of the concept
-`OptimisationDTraits` as its template argument.
+`MinSphereAnnulusDTraits` as its template argument.
-We provide the models `CGAL::Optimisation_d_traits_2`,
-`CGAL::Optimisation_d_traits_3` and
-`CGAL::Optimisation_d_traits_d`
+We provide the models `CGAL::Min_sphere_annulus_d_traits_2`,
+`CGAL::Min_sphere_annulus_d_traits_3` and
+`CGAL::Min_sphere_annulus_d_traits_d`
for two-, three-, and \f$ d\f$-dimensional points respectively.
-\sa `CGAL::Optimisation_d_traits_2`
-\sa `CGAL::Optimisation_d_traits_3`
-\sa `CGAL::Optimisation_d_traits_d`
-\sa `OptimisationDTraits`
+\sa `CGAL::Min_sphere_annulus_d_traits_2`
+\sa `CGAL::Min_sphere_annulus_d_traits_3`
+\sa `CGAL::Min_sphere_annulus_d_traits_d`
+\sa `MinSphereAnnulusDTraits`
\sa `CGAL::Min_circle_2`
\sa `CGAL::Min_sphere_of_spheres_d`
\sa `CGAL::Min_annulus_d`
@@ -68,7 +68,7 @@ each take linear time.
\cgalHeading{Example}
-\cgalExample{Min_sphere_d/min_sphere_d.cpp}
+\cgalExample{Min_sphere_d/min_sphere_homogeneous_d.cpp}
*/
template< typename Traits >
diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d.h
index f640780487c..3d77b9a4d88 100644
--- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d.h
+++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d.h
@@ -50,7 +50,7 @@ minsphere can be described by the number \f$ t\f$, which is called the
sphere's discriminant, and by \f$ d+1\f$ pairs \f$ (a_i,b_i)\in\Q^2\f$
(one for the radius and \f$ d\f$ for the center coordinates).
-Note: This class (almost) replaces
+\note This class (almost) replaces
`CGAL::Min_sphere_d`, which solves the less general
problem of finding the smallest enclosing ball of a set of
points. `Min_sphere_of_spheres_d` is faster than
diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/min_quadrilateral_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/min_quadrilateral_2.h
index 8d5a65a2046..1197eebf4bb 100644
--- a/Bounding_volumes/doc/Bounding_volumes/CGAL/min_quadrilateral_2.h
+++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/min_quadrilateral_2.h
@@ -3,6 +3,11 @@ namespace CGAL {
/*!
\ingroup PkgBoundingVolumesRef
+computes a minimum area enclosing parallelogram of the point set
+described by [`points_begin`, `points_end`), writes its
+vertices (counterclockwise) to `o` and returns the past-the-end
+iterator of this sequence.
+
The function computes a minimum area enclosing
parallelogram \f$ A(P)\f$ of a given convex point set \f$ P\f$. Note that
\f$ R(P)\f$ is not necessarily axis-parallel, and it is in general not
@@ -11,10 +16,6 @@ parallelogram enclosing \f$ P\f$ - as a convex set - contains the convex
hull of \f$ P\f$. For general point sets one has to compute the convex hull
as a preprocessing step.
-computes a minimum area enclosing parallelogram of the point set
-described by [`points_begin`, `points_end`), writes its
-vertices (counterclockwise) to `o` and returns the past-the-end
-iterator of this sequence.
If the input range is empty, `o` remains unchanged.
If the input range consists of one element only, this point is written
@@ -74,6 +75,11 @@ namespace CGAL {
/*!
\ingroup PkgBoundingVolumesRef
+computes a minimum area enclosing rectangle of the point set described
+by [`points_begin`, `points_end`), writes its vertices
+(counterclockwise) to `o`, and returns the past-the-end iterator
+of this sequence.
+
The function computes a minimum area enclosing rectangle
\f$ R(P)\f$ of a given convex point set \f$ P\f$. Note that \f$ R(P)\f$ is not
necessarily axis-parallel, and it is in general not unique. The focus
@@ -81,10 +87,6 @@ on convex sets is no restriction, since any rectangle enclosing
\f$ P\f$ - as a convex set - contains the convex hull of \f$ P\f$. For general
point sets one has to compute the convex hull as a preprocessing step.
-computes a minimum area enclosing rectangle of the point set described
-by [`points_begin`, `points_end`), writes its vertices
-(counterclockwise) to `o`, and returns the past-the-end iterator
-of this sequence.
If the input range is empty, `o` remains unchanged.
@@ -143,6 +145,10 @@ namespace CGAL {
/*!
\ingroup PkgBoundingVolumesRef
+computes a minimum enclosing strip of the point set described by
+[`points_begin`, `points_end`), writes its two bounding lines
+to `o` and returns the past-the-end iterator of this sequence.
+
The function computes a minimum width enclosing strip
\f$ S(P)\f$ of a given convex point set \f$ P\f$. A strip is the closed region
bounded by two parallel lines in the plane. Note that \f$ S(P)\f$ is not
@@ -151,10 +157,6 @@ parallelogram enclosing \f$ P\f$ - as a convex set - contains the convex
hull of \f$ P\f$. For general point sets one has to compute the convex hull
as a preprocessing step.
-computes a minimum enclosing strip of the point set described by
-[`points_begin`, `points_end`), writes its two bounding lines
-to `o` and returns the past-the-end iterator of this sequence.
-
If the input range is empty or consists of one element only, `o`
remains unchanged.
@@ -205,4 +207,3 @@ OutputIterator o,
Traits& t = Default_traits);
} /* namespace CGAL */
-
diff --git a/Bounding_volumes/doc/Bounding_volumes/Concepts/MinQuadrilateralTraits_2.h b/Bounding_volumes/doc/Bounding_volumes/Concepts/MinQuadrilateralTraits_2.h
index 692849cba12..be4ba5f5a2d 100644
--- a/Bounding_volumes/doc/Bounding_volumes/Concepts/MinQuadrilateralTraits_2.h
+++ b/Bounding_volumes/doc/Bounding_volumes/Concepts/MinQuadrilateralTraits_2.h
@@ -5,8 +5,8 @@
The concept `MinQuadrilateralTraits_2` defines types and operations
needed to compute minimum enclosing quadrilaterals of a planar point
-set using the functions `min_rectangle_2`,
-`min_parallelogram_2` and `min_strip_2`.
+set using the functions `min_rectangle_2()`,
+`min_parallelogram_2()` and `min_strip_2()`.
\cgalHasModel `CGAL::Min_quadrilateral_default_traits_2`
@@ -262,4 +262,3 @@ const ;
/// @}
}; /* end MinQuadrilateralTraits_2 */
-
diff --git a/Bounding_volumes/doc/Bounding_volumes/Concepts/MinSphereOfSpheresTraits.h b/Bounding_volumes/doc/Bounding_volumes/Concepts/MinSphereOfSpheresTraits.h
index fc53bdb32b9..4a59d4c3390 100644
--- a/Bounding_volumes/doc/Bounding_volumes/Concepts/MinSphereOfSpheresTraits.h
+++ b/Bounding_volumes/doc/Bounding_volumes/Concepts/MinSphereOfSpheresTraits.h
@@ -10,6 +10,9 @@ following constants, types, predicates and operations.
\cgalHasModel `CGAL::Min_sphere_of_spheres_d_traits_3`
\cgalHasModel `CGAL::Min_sphere_of_spheres_d_traits_d`
+\cgalHasModel `CGAL::Min_sphere_of_points_d_traits_2`
+\cgalHasModel `CGAL::Min_sphere_of_points_d_traits_3`
+\cgalHasModel `CGAL::Min_sphere_of_points_d_traits_d`
*/
class MinSphereOfSpheresTraits {
@@ -112,4 +115,3 @@ Cartesian_const_iterator center_cartesian_begin(const Sphere& s);
/// @}
}; /* end MinSphereOfSpheresTraits */
-
diff --git a/Bounding_volumes/doc/Bounding_volumes/Concepts/RectangularPCenterTraits_2.h b/Bounding_volumes/doc/Bounding_volumes/Concepts/RectangularPCenterTraits_2.h
index fefd3538e5b..9c0727d44bd 100644
--- a/Bounding_volumes/doc/Bounding_volumes/Concepts/RectangularPCenterTraits_2.h
+++ b/Bounding_volumes/doc/Bounding_volumes/Concepts/RectangularPCenterTraits_2.h
@@ -5,7 +5,7 @@
The concept `RectangularPCenterTraits_2` defines types and operations
needed to compute rectilinear \f$ p\f$-centers of a planar point set
-using the function `CGAL::rectangular_p_center_2`.
+using the function `CGAL::rectangular_p_center_2()`.
\cgalHasModel `CGAL::Rectangular_p_center_default_traits_2`
@@ -193,4 +193,3 @@ construct_iso_rectangle_2_above_right_point_2_object() const;
/// @}
}; /* end RectangularPCenterTraits_2 */
-
diff --git a/Bounding_volumes/doc/Bounding_volumes/examples.txt b/Bounding_volumes/doc/Bounding_volumes/examples.txt
index 0cdfa3636b6..4b4d2ef68bd 100644
--- a/Bounding_volumes/doc/Bounding_volumes/examples.txt
+++ b/Bounding_volumes/doc/Bounding_volumes/examples.txt
@@ -4,11 +4,13 @@
\example Min_annulus_d/min_annulus_d.cpp
\example Min_annulus_d/min_annulus_d_fast_exact.cpp
\example Min_circle_2/min_circle_2.cpp
+\example Min_circle_2/min_circle_homogeneous_2.cpp
\example Min_ellipse_2/min_ellipse_2.cpp
\example Min_quadrilateral_2/minimum_enclosing_parallelogram_2.cpp
\example Min_quadrilateral_2/minimum_enclosing_rectangle_2.cpp
\example Min_quadrilateral_2/minimum_enclosing_strip_2.cpp
-\example Min_sphere_d/min_sphere_d.cpp
+\example Min_sphere_d/min_sphere_3.cpp
+\example Min_sphere_d/min_sphere_homogeneous_3.cpp
\example Min_sphere_of_spheres_d/benchmark.cpp
\example Min_sphere_of_spheres_d/min_sphere_of_spheres_d_2.cpp
\example Min_sphere_of_spheres_d/min_sphere_of_spheres_d_3.cpp
diff --git a/Bounding_volumes/examples/Min_circle_2/min_circle_2.cpp b/Bounding_volumes/examples/Min_circle_2/min_circle_2.cpp
index 0645bf979cc..e45b00c7b87 100644
--- a/Bounding_volumes/examples/Min_circle_2/min_circle_2.cpp
+++ b/Bounding_volumes/examples/Min_circle_2/min_circle_2.cpp
@@ -1,30 +1,33 @@
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+
#include
-// typedefs
-typedef CGAL::Exact_predicates_exact_constructions_kernel K;
-typedef CGAL::Min_circle_2_traits_2 Traits;
-typedef CGAL::Min_circle_2 Min_circle;
-
-typedef K::Point_2 Point;
+typedef CGAL::Simple_cartesian K;
+typedef CGAL::Min_sphere_of_points_d_traits_2 Traits;
+typedef CGAL::Min_sphere_of_spheres_d Min_circle;
+typedef K::Point_2 Point;
int
main( int, char**)
{
const int n = 100;
Point P[n];
+ CGAL::Random r; // random number generator
- for ( int i = 0; i < n; ++i)
- P[ i] = Point( (i%2 == 0 ? i : -i), 0);
- // (0,0), (-1,0), (2,0), (-3,0), ...
+ for ( int i = 0; i < n; ++i){
+ P[ i] = Point(r.get_double(), r.get_double());
+ }
- Min_circle mc1( P, P+n, false); // very slow
- Min_circle mc2( P, P+n, true); // fast
-
- CGAL::set_pretty_mode( std::cout);
- std::cout << mc2;
+ Min_circle mc( P, P+n);
+ Min_circle::Cartesian_const_iterator ccib = mc.center_cartesian_begin(), ccie = mc.center_cartesian_end();
+ std::cout << "center:";
+ for( ; ccib != ccie; ++ccib){
+ std::cout << " " << *ccib;
+ }
+ std::cout << std::endl << "radius: " << mc.radius() << std::endl;
return 0;
}
diff --git a/Bounding_volumes/examples/Min_circle_2/min_circle_homogeneous_2.cpp b/Bounding_volumes/examples/Min_circle_2/min_circle_homogeneous_2.cpp
new file mode 100644
index 00000000000..aac519412db
--- /dev/null
+++ b/Bounding_volumes/examples/Min_circle_2/min_circle_homogeneous_2.cpp
@@ -0,0 +1,33 @@
+#include
+#include
+#include
+#include
+
+#include
+
+// typedefs
+typedef CGAL::Exact_integer RT;
+typedef CGAL::Simple_homogeneous