mirror of https://github.com/CGAL/cgal
Updated documentation
This commit is contained in:
parent
b821acb09a
commit
82c2a05e7d
|
|
@ -95,7 +95,8 @@ Cell_handle loc, int li, int lj);
|
|||
/// @}
|
||||
|
||||
/*! \name
|
||||
The following method allows one to insert several points. It returns the number of inserted points.
|
||||
The following method allows the insertion of several points and returns
|
||||
the number of inserted points.
|
||||
*/
|
||||
/// @{
|
||||
|
||||
|
|
@ -121,27 +122,28 @@ bool is_large_point_set = false);
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
Moves the point stored in `v` to `p`, while preserving the Delaunay
|
||||
property. This performs an action semantically equivalent to `remove(v)`
|
||||
followed by `insert(p)`, but is supposedly faster when the point has
|
||||
not moved much. Returns the handle to the new vertex.
|
||||
\pre `p` lies in the original domain `domain`.
|
||||
*/
|
||||
Vertex_handle move_point(Vertex_handle v, const Point & p);
|
||||
Moves the point stored in `v` to `p`, while preserving the Delaunay
|
||||
property. This performs an action semantically equivalent to `remove(v)`
|
||||
followed by `insert(p)`, but is supposedly faster when the point has
|
||||
not moved much. Returns the handle to the new vertex.
|
||||
\pre `p` lies in the original domain `domain`.
|
||||
*/
|
||||
Vertex_handle move_point(Vertex_handle v, const Point & p);
|
||||
|
||||
/// @}
|
||||
/// @}
|
||||
|
||||
/*! \name Removal
|
||||
/*! \name Removal
|
||||
|
||||
The following methods remove points in the triangulation.
|
||||
|
||||
When a vertex `v` is removed from a triangulation, all the cells
|
||||
incident to `v` must be removed, and the polyhedral region consisting
|
||||
of all the tetrahedra that are incident to `v` must be
|
||||
re-triangulated. So, the problem reduces to triangulating a polyhedral
|
||||
re-triangulated. The problem thus reduces to triangulating a polyhedral
|
||||
region, while preserving its boundary, or to compute a
|
||||
<I>constrained</I> triangulation. This is known to be sometimes
|
||||
impossible: the Schönhardt polyhedron cannot be triangulated
|
||||
\cgalCite{cgal:s-cgehd-98}.
|
||||
|
||||
However, when dealing with Delaunay triangulations, the case of such
|
||||
polyhedra that cannot be re-triangulated cannot happen, so \cgal
|
||||
proposes a vertex removal.
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ class `Periodic_3_Delaunay_triangulation_3<Periodic_3DelaunayTriangulationTraits
|
|||
\tparam Periodic_3Offset_3 must be a model of the concept `Periodic_3Offset_3` and defaults to `Periodic_3_offset_3`.
|
||||
|
||||
If `Traits` is a `CGAL::Filtered_kernel` (detected when `Traits::Has_filtered_predicates` exists
|
||||
and is `true`), this class automatically provides filtered predicates. Similarly statically filtered predicates
|
||||
and is `true`), this class automatically provides filtered predicates. Similarly, statically filtered predicates
|
||||
will be used if the flag `Traits::Has_static_filters` exists and is `true`.
|
||||
By default, this holds for `CGAL::Exact_predicates_inexact_constructions_kernel` and
|
||||
`CGAL::Exact_predicates_exact_constructions_kernel`.
|
||||
|
|
@ -19,7 +19,8 @@ By default, this holds for `CGAL::Exact_predicates_inexact_constructions_kernel`
|
|||
\cgalModels Periodic_3DelaunayTriangulationTraits_3
|
||||
*/
|
||||
template< typename Traits, typename Periodic_3Offset_3 >
|
||||
class Periodic_3_Delaunay_triangulation_traits_3 : public Traits {
|
||||
class Periodic_3_Delaunay_triangulation_traits_3
|
||||
: public Periodic_3_triangulation_traits_base_3 < Traits, Periodic_3Offset_3> {
|
||||
public:
|
||||
}; /* end Periodic_3_Delaunay_triangulation_traits_3 */
|
||||
} /* end namespace CGAL */
|
||||
|
|
|
|||
|
|
@ -10,8 +10,9 @@ weighted Delaunay triangulation in three-dimensional periodic space.
|
|||
\tparam Periodic_3RegularTriangulationTraits_3 is the geometric traits class.
|
||||
|
||||
\tparam TriangulationDataStructure_3 is the triangulation data structure.
|
||||
Its default value is
|
||||
`Triangulation_data_structure_3<Triangulation_vertex_base_3<PT,Periodic_3_triangulation_ds_vertex_base_3<>>,Regular_triangulation_cell_base_3<PT,Periodic_3_triangulation_ds_cell_base_3<>>>`.
|
||||
Its default value is
|
||||
`Triangulation_data_structure_3<Regular_triangulation_vertex_base_3<PT,Periodic_3_triangulation_ds_vertex_base_3<> >,
|
||||
Regular_triangulation_cell_base_3<PT,Periodic_3_triangulation_ds_cell_base_3<>>>`.
|
||||
|
||||
*/
|
||||
template< typename Periodic_3TriangulationTraits_3, typename TriangulationDataStructure_3 >
|
||||
|
|
@ -25,8 +26,8 @@ public:
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
*/
|
||||
typedef Periodic_3RegularTriangulationTraits_3::Bare_point Bare_point;
|
||||
*/
|
||||
typedef Periodic_3RegularTriangulationTraits_3::Point_3 Bare_point;
|
||||
|
||||
/*!
|
||||
The type for points
|
||||
|
|
|
|||
|
|
@ -7,23 +7,20 @@ namespace CGAL {
|
|||
The class `Periodic_3_regular_triangulation_traits_3` is designed as a default traits class for the
|
||||
class `Periodic_3_regular_triangulation_3<Periodic_3RegularTriangulationTraits_3,TriangulationDataStructure_3>`.
|
||||
|
||||
\tparam K must be a model of the `RegularTriangulationTraits_3` concept.
|
||||
\tparam Periodic_3Offset_3 must be a model of the concept `Periodic_3Offset_3` and defaults to `Periodic_3_offset_3`.
|
||||
\tparam Traits must be a model of the `RegularTriangulationTraits_3` concept.
|
||||
\tparam Periodic_3Offset_3 must be a model of the concept `Periodic_3Offset_3` and defaults to `Periodic_3_offset_3`.
|
||||
|
||||
\cgalModels Periodic_3RegularTriangulationTraits_3
|
||||
|
||||
This template class is specialized for
|
||||
`CGAL::Regular_triangulation_euclidean_traits_3<CGAL::Filtered_kernel>`,
|
||||
so that it automatically provides
|
||||
filtered predicates. This holds implicitly for
|
||||
`CGAL::Regular_triangulation_euclidean_traits_3<CGAL::Exact_predicates_inexact_constructions_kernel>`,
|
||||
as `CGAL::Exact_predicates_inexact_constructions_kernel` is an
|
||||
instantiation of `CGAL::Filtered_kernel`.
|
||||
If `Traits` is a `CGAL::Filtered_kernel` (detected when `Traits::Has_filtered_predicates` exists
|
||||
and is `true`), this class automatically provides filtered predicates.
|
||||
By default, this holds for `CGAL::Exact_predicates_inexact_constructions_kernel` and
|
||||
`CGAL::Exact_predicates_exact_constructions_kernel`.
|
||||
|
||||
*/
|
||||
template< typename K, typename Periodic_3Offset_3 >
|
||||
class Periodic_3_regular_triangulation_traits_3 :
|
||||
public Regular_triangulation_euclidean_traits_3< K > {
|
||||
template< typename Traits, typename Periodic_3Offset_3 >
|
||||
class Periodic_3_regular_triangulation_traits_3 :
|
||||
public Periodic_3_triangulation_traits_base_3< Traits, Periodic_3Offset_3 > {
|
||||
public:
|
||||
}; /* end Periodic_3_regular_triangulation_traits_3 */
|
||||
} /* end namespace CGAL */
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@ namespace CGAL {
|
|||
/*!
|
||||
\ingroup PkgPeriodic3Triangulation3TraitsClasses
|
||||
|
||||
\warning Using this traits class for Periodic_3_Delaunay_triangulation_3 is deprecated. You should use Periodic_3_Delaunay_triangulation_traits_3 instead.
|
||||
|
||||
The class `Periodic_3_triangulation_traits_3` is designed as a default traits class for the
|
||||
class `Periodic_3_triangulation_3<Periodic_3TriangulationTraits_3,TriangulationDataStructure_3>`.
|
||||
|
||||
|
|
@ -13,7 +11,7 @@ class `Periodic_3_triangulation_3<Periodic_3TriangulationTraits_3,TriangulationD
|
|||
\tparam Periodic_3Offset_3 must be a model of the concept `Periodic_3Offset_3` and defaults to `Periodic_3_offset_3`.
|
||||
|
||||
If `Traits` is a `CGAL::Filtered_kernel` (detected when `Traits::Has_filtered_predicates` exists
|
||||
and is `true`), this class automatically provides filtered predicates. Similarly statically filtered predicates
|
||||
and is `true`), this class automatically provides filtered predicates. Similarly, statically filtered predicates
|
||||
will be used if the flag `Traits::Has_static_filters` exists and is `true`.
|
||||
By default, this holds for `CGAL::Exact_predicates_inexact_constructions_kernel` and
|
||||
`CGAL::Exact_predicates_exact_constructions_kernel`.
|
||||
|
|
|
|||
|
|
@ -3,15 +3,15 @@
|
|||
\ingroup PkgPeriodic3Triangulation3Concepts
|
||||
\cgalConcept
|
||||
|
||||
The concept `Periodic_3DelaunayTriangulationTraits_3` is the first template parameter of the classes
|
||||
`Periodic_3_Delaunay_triangulation_3`.
|
||||
It refines the concept
|
||||
`DelaunayTriangulationTraits_3` from the \cgal 3D Triangulations.
|
||||
It redefines the geometric objects, predicates and constructions to
|
||||
work with point-offset pairs. In most cases the offsets will be
|
||||
(0,0,0) and the predicates from `DelaunayTriangulationTraits_3`
|
||||
can be used directly. For efficiency reasons we maintain for each
|
||||
functor the version without offsets.
|
||||
The concept `Periodic_3DelaunayTriangulationTraits_3` is the first template parameter
|
||||
of the class `CGAL::Periodic_3_Delaunay_triangulation_3`.
|
||||
It refines the concept `DelaunayTriangulationTraits_3` from the
|
||||
\cgal 3D Triangulations.
|
||||
It redefines the geometric objects, predicates and constructions to
|
||||
work with point-offset pairs. In most cases the offsets will be
|
||||
(0,0,0) and the predicates from `DelaunayTriangulationTraits_3`
|
||||
can be used directly. For efficiency reasons we maintain for each
|
||||
functor the version without offsets.
|
||||
|
||||
\cgalRefines Periodic_3TriangulationTraits_3
|
||||
\cgalRefines DelaunayTriangulationTraits_3
|
||||
|
|
@ -69,7 +69,7 @@ typedef unspecified_type Compare_distance_3;
|
|||
/// @}
|
||||
|
||||
/// \name
|
||||
/// In addition, only when vertex removal is used, the traits class must provide the following predicate objects
|
||||
/// When vertex removal is used, the traits class must in addition provide the following predicate objects
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
|
@ -110,8 +110,8 @@ typedef unspecified_type Coplanar_side_of_bounded_circle_3;
|
|||
/// @}
|
||||
|
||||
/// \name
|
||||
/// In addition, only when `is_Gabriel` is used, the traits class must
|
||||
/// provide the following predicate object:
|
||||
/// When `is_Gabriel` is used, the traits class must
|
||||
/// in addition provide the following predicate object:
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
|
@ -157,8 +157,8 @@ typedef unspecified_type Side_of_bounded_sphere_3;
|
|||
/// @}
|
||||
|
||||
/// \name
|
||||
/// In addition, only when the dual operations are used, the traits
|
||||
/// class must provide the following constructor object:
|
||||
/// When the dual operations are used, the traits
|
||||
/// class must in addition provide the following constructor object:
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
|
@ -186,9 +186,9 @@ Default constructor.
|
|||
Periodic_3_Delaunay_triangulation_traits_3();
|
||||
|
||||
/*!
|
||||
Copy constructor.
|
||||
*/
|
||||
Periodic_3_Delaunay_triangulation_traits_3(const Periodic_triangulation_traits_3 & tr);
|
||||
Copy constructor.
|
||||
*/
|
||||
Periodic_3_Delaunay_triangulation_traits_3(const Periodic_3_Delaunay_triangulation_traits_3 & tr);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
@ -227,7 +227,7 @@ coplanar_side_of_bounded_circle_3_object();
|
|||
/// @}
|
||||
|
||||
/// \name
|
||||
/// The following function must be provided only if the `is_Gabriel`
|
||||
/// The following function must be provided if the `is_Gabriel`
|
||||
/// methods of `Periodic_3_Delaunay_triangulation_3` are used;
|
||||
/// otherwise a dummy function can be provided.
|
||||
/// @{
|
||||
|
|
@ -239,8 +239,8 @@ Side_of_bounded_sphere_3 side_of_bounded_sphere_3_object();
|
|||
|
||||
/// @}
|
||||
|
||||
/// \name
|
||||
/// The following function must be provided only if the methods of
|
||||
/// \name
|
||||
/// The following function must be provided if the methods of
|
||||
/// `Periodic_3_Delaunay_triangulation_3` returning elements of the
|
||||
/// Voronoi diagram are used; otherwise a dummy function can be
|
||||
/// provided:
|
||||
|
|
|
|||
|
|
@ -6,14 +6,16 @@
|
|||
\cgalRefines `RegularTriangulationCellBase_3`
|
||||
\cgalRefines `Periodic_3TriangulationDSCellBase_3`
|
||||
|
||||
\cgalHasModel CGAL::Regular_triangulation_cell_base_3<Periodic_3RegularTriangulationTraits_3, Periodic_3_triangulation_ds_cell_base_3 < > >
|
||||
\cgalHasModel CGAL::Regular_triangulation_cell_base_with_weighted_circumcenter_3<Periodic_3RegularTriangulationTraits_3, Periodic_3_triangulation_ds_cell_base_3 < > >
|
||||
\cgalHasModel CGAL::Regular_triangulation_cell_base_3<Periodic_3RegularTriangulationTraits_3,
|
||||
Periodic_3_triangulation_ds_cell_base_3< > >
|
||||
\cgalHasModel CGAL::Regular_triangulation_cell_base_with_weighted_circumcenter_3<Periodic_3RegularTriangulationTraits_3,
|
||||
Periodic_3_triangulation_ds_cell_base_3< > >
|
||||
|
||||
The template parameter `Periodic_3RegularTriangulationTraits_3` is expected to be the same as the
|
||||
traits class used in `Periodic_3_regular_triangulation_3`.
|
||||
The template parameter `Periodic_3RegularTriangulationTraits_3` is expected to be the same as the
|
||||
traits class used in `CGAL::Periodic_3_regular_triangulation_3`.
|
||||
|
||||
\sa `TriangulationDataStructure_3`
|
||||
\sa `Periodic_3TriangulationDSVertexBase_3`
|
||||
\sa `TriangulationDataStructure_3`
|
||||
\sa `Periodic_3RegularTriangulationDSVertexBase_3`
|
||||
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
\ingroup PkgPeriodic3Triangulation3Concepts
|
||||
\cgalConcept
|
||||
|
||||
The concept `Periodic_3RegularTriangulationTraits_3` is the first template parameter of the class
|
||||
`Periodic_3_regular_triangulation_3`.
|
||||
The concept `Periodic_3RegularTriangulationTraits_3` is the first template parameter
|
||||
of the class `CGAL::Periodic_3_regular_triangulation_3`.
|
||||
It refines the concept
|
||||
`RegularTriangulationTraits_3` from the \cgal 3D Triangulations.
|
||||
It redefines the geometric objects, predicates and constructions to
|
||||
|
|
@ -36,65 +36,83 @@ public:
|
|||
/*!
|
||||
A predicate object that must provide the function operators:
|
||||
|
||||
`Oriented_side operator()(Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 s, Weighted_point_3 t)`,
|
||||
`Oriented_side operator()(Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 s, Weighted_point_3 t)`,
|
||||
|
||||
which determines the position of `t` with respect to the power sphere of `p, q, r, s`.
|
||||
which determines the position of `t` with respect to the power sphere of `p, q, r, s`.
|
||||
|
||||
`Oriented_side operator()(Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 s, Weighted_point_3 t,
|
||||
Periodic_3_offset_3 o_p, Periodic_3_offset_3 o_q, Periodic_3_offset_3 o_r, Periodic_3_offset_3 o_s, Periodic_3_offset_3 o_t)`,
|
||||
Periodic_3_offset_3 o_p, Periodic_3_offset_3 o_q, Periodic_3_offset_3 o_r, Periodic_3_offset_3 o_s, Periodic_3_offset_3 o_t)`,
|
||||
|
||||
which is the same for the point-offset pair `(t,o_t)` with respect to the power sphere of the point-offset pairs
|
||||
`(p,o_p), (q,o_q), (r,o_r), (s,o_s)`.
|
||||
\pre `p`, `q`, `r`, `s`, `t` lie inside the domain and `p, q, r, s` are not coplanar.
|
||||
`(p,o_p), (q,o_q), (r,o_r), (s,o_s)`.
|
||||
\pre `p`, `q`, `r`, `s`, `t` lie inside the domain and `p, q, r, s` are not coplanar.
|
||||
|
||||
<HR WIDTH=50%>
|
||||
|
||||
In addition, only when vertex removal is used, the predicate must provide the following function operators:
|
||||
When vertex removal is used, the predicate must in addition provide the following function operators:
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 t)`,
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 t)`,
|
||||
|
||||
which has a definition similar to the previous method, for coplanar points,
|
||||
with the power circle of `p,q,r`.
|
||||
which has a definition similar to the previous method, for coplanar points,
|
||||
with the power circle of `p,q,r`.
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 t,
|
||||
Periodic_3_offset_3 o_p, Periodic_3_offset_3 o_q, Periodic_3_offset_3 o_r, Periodic_3_offset_3 o_t)`,
|
||||
|
||||
which is the same for point-offset pairs.
|
||||
|
||||
\pre `p`, `q`, `r`, `t` lie inside the domain, `p, q, r` are not collinear, and `p, q, r, t` are coplanar.
|
||||
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 t)`,
|
||||
|
||||
which is the same for collinear points, and the power segment of `p` and `q`,
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 t,
|
||||
Periodic_3_offset_3 o_p, Periodic_3_offset_3 o_q, Periodic_3_offset_3 o_t)`,
|
||||
|
||||
which is the same for point-offset pairs.
|
||||
|
||||
\pre `p`, `q`, `t` lie inside the domain, `p` and `q` have different Bare_points, and `p, q, t` are collinear.
|
||||
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q)`,
|
||||
|
||||
which is the same for equal points, that is when `p` and `q`
|
||||
have equal coordinates, then it returns the comparison of the weights.
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q,
|
||||
Periodic_3_offset_3 o_p, Periodic_3_offset_3 o_q)`,
|
||||
Periodic_3_offset_3 o_p, Periodic_3_offset_3 o_q, Periodic_3_offset_3 o_r, Periodic_3_offset_3 o_t)`,
|
||||
|
||||
which is the same for point-offset pairs.
|
||||
|
||||
\pre `p` and `q` lie inside the domain and have equal Bare_points.
|
||||
\pre `p`, `q`, `r`, `t` lie inside the domain, `p, q, r` are not collinear, and `p, q, r, t` are coplanar.
|
||||
|
||||
*/
|
||||
typedef unspecified_type Power_test_3;
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 t)`,
|
||||
|
||||
which is the same for collinear points, and the power segment of `p` and `q`,
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 t,
|
||||
Periodic_3_offset_3 o_p, Periodic_3_offset_3 o_q, Periodic_3_offset_3 o_t)`,
|
||||
|
||||
which is the same for point-offset pairs.
|
||||
|
||||
\pre `p`, `q`, `t` lie inside the domain, `p` and `q` have different Bare_points, and `p, q, t` are collinear.
|
||||
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q)`,
|
||||
|
||||
which is the same for equal points, that is when `p` and `q`
|
||||
have equal coordinates, then it returns the comparison of the weights.
|
||||
|
||||
`Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q,
|
||||
Periodic_3_offset_3 o_p, Periodic_3_offset_3 o_q)`,
|
||||
|
||||
which is the same for point-offset pairs.
|
||||
|
||||
\pre `p` and `q` lie inside the domain and have equal Bare_points.
|
||||
|
||||
*/
|
||||
typedef unspecified_type Power_side_of_oriented_power_sphere_3;
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name
|
||||
/// In addition, only when vertex removal is used, the traits class must provide the following predicate object
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
A predicate object that must provide the function operators:
|
||||
|
||||
`Orientation operator()(Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 s, FT w)`,
|
||||
|
||||
which compares the weight of the smallest sphere orthogonal to the input weighted
|
||||
points with the input weight `w` and returns a `SMALLER`, `EQUAL`, or `LARGER`.
|
||||
|
||||
\pre `p`, `q`, `r`, and `s` lie inside the domain.
|
||||
|
||||
*/
|
||||
typedef unspecified_type Compare_weighted_squared_radius_3;
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name
|
||||
/// When vertex removal is used, the traits class must in addition provide the following predicate object
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
|
@ -117,8 +135,8 @@ typedef unspecified_type Coplanar_orientation_3;
|
|||
/// @}
|
||||
|
||||
/// \name
|
||||
/// In addition, only when the dual operations are used, the traits
|
||||
/// class must provide the following constructor object:
|
||||
/// When the dual operations are used, the traits
|
||||
/// class must in addition provide the following constructor object:
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
|
@ -159,13 +177,15 @@ Periodic_3_regular_triangulation_traits_3(const Periodic_3_regular_triangulation
|
|||
|
||||
/*!
|
||||
|
||||
*/
|
||||
Power_test_3 power_test_3_object();
|
||||
*/
|
||||
Power_side_of_oriented_power_sphere_3 power_side_of_oriented_power_sphere_3_object();
|
||||
|
||||
Compare_weighted_squared_radius_3 compare_weighted_squared_radius_3_object();
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name
|
||||
/// The following functions must be provided if vertex removal is
|
||||
/// The following function must be provided if vertex removal is
|
||||
/// used; otherwise dummy functions can be provided.
|
||||
/// @{
|
||||
|
||||
|
|
@ -180,13 +200,13 @@ Coplanar_orientation_3 coplanar_3_orientation_3_object();
|
|||
/// The following function must be provided only if the methods of
|
||||
/// `Periodic_3_regular_triangulation_3` returning elements of the
|
||||
/// Voronoi diagram are used; otherwise a dummy function can be
|
||||
/// provided:
|
||||
/// provided.
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
||||
*/
|
||||
Construct_circumcenter_3 construct_weighted_circumcenter_3_object();
|
||||
*/
|
||||
Construct_weighted_circumcenter_3 construct_weighted_circumcenter_3_object();
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ and \ref TDS3secdesign), a cell stores handles to its four vertices
|
|||
and to its four neighbor cells. The vertices and neighbors are
|
||||
indexed 0, 1, 2 and 3. Neighbor `i` lies opposite to vertex `i`.
|
||||
|
||||
For periodic triangulation the cell base class needs to
|
||||
For periodic triangulations, the cell base class needs to
|
||||
additionally store an offset for each vertex. Only the last three
|
||||
bits of each integer are required to be stored. The remaining part
|
||||
does not contain any information.
|
||||
|
|
|
|||
|
|
@ -31,10 +31,9 @@ public:
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
A model of the concept
|
||||
`Periodic_3Offset_3`
|
||||
*/
|
||||
typedef unspecified_type Periodic_3_offset_3;
|
||||
A model of the concept `Periodic_3Offset_3`
|
||||
*/
|
||||
typedef unspecified_type Periodic_3_offset_3;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -196,12 +196,11 @@ Periodic_3_triangulation_traits_3(const Periodic_triangulation_traits_3 & tr);
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
Set the size of the
|
||||
fundamental domain. This is necessary to evaluate predicates
|
||||
correctly.
|
||||
\pre `domain` represents a cube.
|
||||
*/
|
||||
void set_domain(Iso_cuboid_3 domain);
|
||||
Set the size of the fundamental domain. This is necessary to evaluate predicates
|
||||
correctly.
|
||||
\pre `domain` represents a cube.
|
||||
*/
|
||||
void set_domain(const Iso_cuboid_3& domain);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,11 @@
|
|||
\cgalPkgPicture{p3Delaunay3_small.jpg}
|
||||
\cgalPkgSummaryBegin
|
||||
\cgalPkgAuthors{Manuel Caroli, Aymeric Pellé, and Monique Teillaud}
|
||||
\cgalPkgDesc{This package allows to build and handle triangulations of point sets in the three dimensional flat torus. Triangulations are built incrementally and can be modified by insertion or removal of vertices. They offer point location facilities. The package provides Delaunay triangulations and offers nearest neighbor queries and primitives to build the dual Voronoi diagrams.}
|
||||
\cgalPkgDesc{This package allows to build and handle triangulations of point sets
|
||||
in the three dimensional flat torus. Triangulations are built incrementally and
|
||||
can be modified by insertion or removal of vertices. They offer point location
|
||||
facilities. The package provides Delaunay and regular triangulations and offers
|
||||
nearest neighbor queries and primitives to build the dual Voronoi diagrams.}
|
||||
\cgalPkgManuals{Chapter_3D_Periodic_Triangulations,PkgPeriodic3Triangulation3}
|
||||
\cgalPkgSummaryEnd
|
||||
\cgalPkgShortInfoBegin
|
||||
|
|
@ -29,14 +33,14 @@
|
|||
\cgalPkgDescriptionEnd
|
||||
|
||||
The main classes of the 3D Periodic Triangulation package are
|
||||
`Periodic_3_triangulation_3`,
|
||||
`Periodic_3_Delaunay_triangulation_3`,
|
||||
and `Periodic_3_regular_triangulation_3`.
|
||||
`CGAL::Periodic_3_triangulation_3`,
|
||||
`CGAL::Periodic_3_Delaunay_triangulation_3`,
|
||||
and `CGAL::Periodic_3_regular_triangulation_3`.
|
||||
They contain functionality
|
||||
to access triangulations and to run queries on
|
||||
them. `CGAL::Periodic_3_Delaunay_triangulation_3` can construct and
|
||||
modify Delaunay triangulations, while
|
||||
`Periodic_3_regular_triangulation_3` can do it for weighted Delaunay
|
||||
`CGAL::Periodic_3_regular_triangulation_3` can do it for weighted Delaunay
|
||||
triangulations. They take the geometric traits as well
|
||||
as the triangulation data structure as template parameters.
|
||||
|
||||
|
|
@ -79,6 +83,7 @@ of the concept `Periodic_3Offset_3`.
|
|||
- `Periodic_3TriangulationDSCellBase_3`
|
||||
|
||||
- `Periodic_3RegularTriangulationDSCellBase_3`
|
||||
- `Periodic_3RegularTriangulationDSVertexBase_3`
|
||||
|
||||
- `Periodic_3Offset_3`
|
||||
|
||||
|
|
@ -98,9 +103,9 @@ of the concept `Periodic_3Offset_3`.
|
|||
|
||||
### Traits Classes ###
|
||||
|
||||
- `CGAL::Periodic_3_triangulation_traits_3<Traits,Periodic_3Offset_3>`
|
||||
- `CGAL::Periodic_3_Delaunay_triangulation_traits_3<Traits,Periodic_3Offset_3>`
|
||||
|
||||
- `CGAL::Periodic_3_regular_triangulation_traits_3<K,Periodic_3Offset_3>`
|
||||
- `CGAL::Periodic_3_regular_triangulation_traits_3<Traits,Periodic_3Offset_3>`
|
||||
|
||||
## Enums ##
|
||||
|
||||
|
|
|
|||
|
|
@ -150,8 +150,8 @@ five points are co-spherical. Note however that the \cgal
|
|||
implementation computes a uniquely defined triangulation even in these cases
|
||||
\cgalCite{cgal:dt-pvr3d-03}.
|
||||
|
||||
This implementation is fully dynamic: it supports both insertions of
|
||||
points and vertex removal.
|
||||
This implementation is fully dynamic: it supports both point insertion
|
||||
and vertex removal.
|
||||
|
||||
\section Periodic_3_triangulation_3regular Regular Triangulation
|
||||
|
||||
|
|
@ -167,8 +167,8 @@ definition.
|
|||
As for Delaunay triangulations, \cgal computes a uniquely defined
|
||||
regular triangulation even in degenerate cases \cgalCite{cgal:dt-pvrdr-06}.
|
||||
|
||||
The implementation is fully dynamic: it supports both insertions of
|
||||
points and vertex removal.
|
||||
The implementation is fully dynamic: it supports both point insertion
|
||||
and vertex removal.
|
||||
|
||||
\section Periodic_3_triangulation_3Triangulation Triangulation Hierarchy
|
||||
|
||||
|
|
@ -181,25 +181,10 @@ chapter \ref chapterTriangulation3 "3D Triangulations" to the periodic case.
|
|||
We have chosen the prefix "Periodic_3" to emphasize that the
|
||||
triangulation is periodic in all three directions of space.
|
||||
|
||||
|
||||
|
||||
The main classes `Periodic_3_Delaunay_triangulation_3`,
|
||||
`Periodic_3_regular_triangulation_3`, and
|
||||
`Periodic_3_triangulation_3` provide high-level geometric
|
||||
functionality and are responsible for the geometric validity.
|
||||
`Periodic_3_Delaunay_triangulation_3` contains all the
|
||||
functionality that is special to Delaunay triangulations, such as
|
||||
point insertion and vertex removal, the side-of-sphere test, finding
|
||||
the conflicting region of a given point, dual functions etc.
|
||||
`Periodic_3_regular_triangulation_3` does the same for regular
|
||||
triangulations.
|
||||
|
||||
|
||||
`Periodic_3_triangulation_3` contains all the functionality
|
||||
that is common to triangulations in general, such as location of a
|
||||
point in the triangulation \cgalCite{cgal:dpt-wt-02}, access functions,
|
||||
geometric queries like the orientation test etc.
|
||||
|
||||
The main classes `Periodic_3_triangulation_3`,
|
||||
`Periodic_3_Delaunay_triangulation_3`, and `Periodic_3_regular_triangulation_3`
|
||||
provide high-level geometric functionality and are responsible
|
||||
for the geometric validity.
|
||||
They are built as layers on top of a triangulation data structure,
|
||||
which stores their combinatorial structure. This separation between
|
||||
the geometry and the combinatorics is reflected in the software design
|
||||
|
|
@ -216,7 +201,18 @@ combinatorial structure, described in
|
|||
Section \ref P3Triangulation3sectds.
|
||||
</UL>
|
||||
|
||||
\subsection P3Triangulation3secTraits The Geometric Traits Parameter
|
||||
The class `Periodic_3_triangulation_3` contains all the functionality
|
||||
that is common to triangulations in general, such as location of a
|
||||
point in the triangulation \cgalCite{cgal:dpt-wt-02}, access functions,
|
||||
geometric queries like the orientation test etc.
|
||||
The class `Periodic_3_Delaunay_triangulation_3` contains all the
|
||||
functionality that is specific to Delaunay triangulations, such as
|
||||
point insertion and vertex removal, the side-of-sphere test, finding
|
||||
the conflicting region of a given point, computation of dual functions, etc.
|
||||
The class `Periodic_3_regular_triangulation_3` does the same for regular
|
||||
triangulations.
|
||||
|
||||
\subsection P3Triangulation3secTraits The Geometric Traits Parameter
|
||||
|
||||
\subsubsection P3Triangulation3secTraitsP3T3 Traits for Periodic Triangulations
|
||||
|
||||
|
|
@ -225,13 +221,12 @@ The first template parameter of the triangulation class
|
|||
is the geometric traits class, described by the concept
|
||||
`Periodic_3TriangulationTraits_3`. It is different to the
|
||||
TriangulationTraits_3 (see
|
||||
chapter \ref Triangulation3secTraits "3D Triangulations") in that it
|
||||
implements all objects, predicates and constructions with
|
||||
using offsets.
|
||||
chapter \ref Triangulation3secTraits "3D Triangulations") in that it
|
||||
implements all objects, predicates and constructions using offsets.
|
||||
|
||||
The class `Periodic_3_triangulation_traits_3<TriangulationTraits_3,Periodic_3Offset_3>`
|
||||
provides the required functionality. It expects two template
|
||||
parameters: A model of the concept `TriangulationTraits_3`
|
||||
parameters: a model of the concept `TriangulationTraits_3`
|
||||
and a model of the concept `Periodic_3Offset_3`.
|
||||
|
||||
The second parameter `Periodic_3Offset_3` defaults to
|
||||
|
|
@ -244,13 +239,12 @@ The first template parameter of the Delaunay triangulation class
|
|||
is the geometric traits class, described by the concept
|
||||
`Periodic_3DelaunayTriangulationTraits_3`. It is different to the
|
||||
DelaunayTriangulationTraits_3 (see
|
||||
chapter \ref Triangulation3secTraits "3D Triangulations") in that it
|
||||
implements all objects, predicates and constructions with
|
||||
using offsets.
|
||||
chapter \ref Triangulation3secTraits "3D Triangulations") in that it
|
||||
implements all objects, predicates and constructions using offsets.
|
||||
|
||||
The class `Periodic_3_Delaunay_triangulation_traits_3<DelaunayTriangulationTraits_3,Periodic_3Offset_3>`
|
||||
provides the required functionality. It expects two template
|
||||
parameters: A model of the concept `DelaunayTriangulationTraits_3`
|
||||
parameters: a model of the concept `DelaunayTriangulationTraits_3`
|
||||
and a model of the concept `Periodic_3Offset_3`.
|
||||
|
||||
The second parameter `Periodic_3Offset_3` defaults to
|
||||
|
|
@ -264,13 +258,12 @@ The first template parameter of the regular triangulation class
|
|||
is the geometric traits class, described by the concept
|
||||
`Periodic_3RegularTriangulationTraits_3`. It is different to the
|
||||
RegularTriangulationTraits_3 (see
|
||||
chapter \ref Triangulation3secTraits "3D Triangulations") in that it
|
||||
implements all objects, predicates and constructions with
|
||||
using offsets.
|
||||
chapter \ref Triangulation3secTraits "3D Triangulations") in that it
|
||||
implements all objects, predicates and constructions using offsets.
|
||||
|
||||
The class `Periodic_3_regular_triangulation_traits_3<RegularTriangulationTraits_3,Periodic_3Offset_3>`
|
||||
provides the required functionality. It expects two template
|
||||
parameters: A model of the concept `RegularTriangulationTraits_3`
|
||||
parameters: a model of the concept `RegularTriangulationTraits_3`
|
||||
and a model of the concept `Periodic_3Offset_3`.
|
||||
|
||||
The second parameter `Periodic_3Offset_3` defaults to
|
||||
|
|
@ -281,16 +274,14 @@ The second parameter `Periodic_3Offset_3` defaults to
|
|||
|
||||
The kernels `Cartesian`, `Homogeneous`,
|
||||
`Simple_cartesian`, `Simple_homogeneous` and
|
||||
`Filtered_kernel` can all be used as models for template parameters
|
||||
`TriangulationTraits_3`, `DelaunayTriangulationTraits_3`.
|
||||
The traits class `Regular_triangulation_euclidean_traits_3` can be used for the template parameter `RegularTriangulationTraits_3`.
|
||||
`Filtered_kernel` can all be used as template parameters of the concepts
|
||||
`TriangulationTraits_3`, `DelaunayTriangulationTraits_3`, and
|
||||
`RegularTriangulationTraits_3`.
|
||||
The periodic triangulation classes provide exact
|
||||
predicates and exact constructions if these respective template parameters
|
||||
do. They provide
|
||||
exact predicates but not exact constructions if
|
||||
do. They provide exact predicates but not exact constructions if
|
||||
`Filtered_kernel<CK>` with `CK` an inexact kernel is used as
|
||||
template parameter. Using
|
||||
`Exact_predicates_inexact_constructions_kernel`
|
||||
template parameter. Using `Exact_predicates_inexact_constructions_kernel`
|
||||
provides fast and exact predicates and not exact constructions,
|
||||
using `Exact_predicates_exact_constructions_kernel` provides
|
||||
fast and exact predicates and exact constructions. The latter is recommended if
|
||||
|
|
@ -320,13 +311,13 @@ structure or a different vertex or cell base class.
|
|||
|
||||
\subsection Periodic_3_triangulation_3Flexibilityofthe Flexibility of the Design
|
||||
|
||||
`Periodic_3_triangulation_3` uses the
|
||||
`TriangulationDataStructure_3` in essentially the same way as
|
||||
`Triangulation_3`. That is why the flexibility described in
|
||||
\ref Triangulation3secdesign is applicable in exactly the same
|
||||
way. Also the classes `Triangulation_vertex_base_with_info_3` and
|
||||
The class `Periodic_3_triangulation_3` uses the
|
||||
`TriangulationDataStructure_3` in essentially the same way as the class
|
||||
`Triangulation_3` and the flexibility described in
|
||||
\ref Triangulation3secdesign is therefore applicable in exactly the same
|
||||
way. Furthermore, the classes `Triangulation_vertex_base_with_info_3` and
|
||||
`Triangulation_cell_base_with_info_3` can be reused directly, see
|
||||
also Example \ref P3Triangulation3secexamplescolor.
|
||||
Example \ref P3Triangulation3secexamplescolor.
|
||||
|
||||
\section P3Triangulation3secexamples Examples
|
||||
|
||||
|
|
@ -335,7 +326,7 @@ also Example \ref P3Triangulation3secexamplescolor.
|
|||
This example shows the incremental construction of a 3D Delaunay
|
||||
triangulation, the location of a point and how to perform elementary
|
||||
operations on indices in a cell. It uses the default parameter of the
|
||||
`Periodic_3_Delaunay_triangulation_3` class for the triangulation
|
||||
class `Periodic_3_Delaunay_triangulation_3` for the triangulation
|
||||
data structure.
|
||||
|
||||
\cgalExample{Periodic_3_triangulation_3/simple_example.cpp}
|
||||
|
|
@ -345,7 +336,7 @@ data structure.
|
|||
The following two examples show how the user can plug his own vertex base in a
|
||||
triangulation. Changing the cell base is similar.
|
||||
|
||||
\subsection P3Triangulation3secexamplescolor Adding a Color
|
||||
\subsubsection P3Triangulation3secexamplescolor Adding a Color
|
||||
|
||||
If the user does not need to add a type in a vertex that depends on the
|
||||
`TriangulationDataStructure_3` (e.g. a `Vertex_handle` or
|
||||
|
|
@ -356,7 +347,7 @@ this way.
|
|||
|
||||
\cgalExample{Periodic_3_triangulation_3/colored_vertices.cpp}
|
||||
|
||||
\subsection Periodic_3_triangulation_3AddingHandles Adding Handles
|
||||
\subsubsection Periodic_3_triangulation_3AddingHandles Adding Handles
|
||||
|
||||
If the user needs to add a type in a vertex that depends on the
|
||||
`TriangulationDataStructure_3` (e.g. a `Vertex_handle` or
|
||||
|
|
@ -369,48 +360,46 @@ as the following example shows.
|
|||
|
||||
The user can check at any time whether a triangulation would be a
|
||||
simplicial complex in \f$ \mathbb T_c^3\f$ and force a conversion if
|
||||
so. However this should be done very carefully in order to be sure
|
||||
so. However, this should be done very carefully in order to ensure
|
||||
that the internal structure always remains a simplicial complex and
|
||||
thus a triangulation.
|
||||
|
||||
In this example we construct a triangulation that can be converted to
|
||||
In this example, we construct a triangulation that can be converted to
|
||||
the 1-sheeted covering space. However, we can insert new points such that the
|
||||
point set does not have a Delaunay triangulation in the 1-sheeted
|
||||
covering space anymore, so the triangulation is not <I>extensible</I>.
|
||||
covering space anymore, rendering the triangulation not <I>extensible</I>.
|
||||
|
||||
\cgalExample{Periodic_3_triangulation_3/covering.cpp}
|
||||
|
||||
\subsection Periodic_3_triangulation_3LargePointSet Large Point Set
|
||||
|
||||
For large point sets there are two optimizations available. Firstly,
|
||||
there is spatial sorting that sorts the input points according to a
|
||||
Two optimizations are available for large point sets. Firstly,
|
||||
spatial sorting can be used to sort the input points according to a
|
||||
Hilbert curve, see chapter \ref secspatial_sorting "Spatial Sorting".
|
||||
The second one inserts 36 appropriately chosen dummy points to avoid
|
||||
the use of a 27-sheeted covering space in the beginning. The 36 dummy
|
||||
Secondly, 36 appropriately chosen dummy points can be inserted to avoid
|
||||
the use of a 27-sheeted covering space in the beginning. These 36 dummy
|
||||
points are deleted in the end. If the point set turns out to not have
|
||||
a Delaunay triangulation in the 1-sheeted covering space, the triangulation is
|
||||
converted to the 27-sheeted covering space during the removal of the 36 dummy
|
||||
points. This might take even longer than computing the triangulation
|
||||
points. Note that this might take even longer than computing the triangulation
|
||||
without using this optimization. In general, uniformly distributed
|
||||
random point sets of more than 1000 points have a Delaunay
|
||||
triangulation in the 1-sheeted covering space.
|
||||
|
||||
It is recommended to run this example only when compiled in release
|
||||
mode because of the relatively large number of points.
|
||||
The following example illustrates the use of these optimization techniques.
|
||||
|
||||
\cgalExample{Periodic_3_triangulation_3/large_point_set.cpp}
|
||||
|
||||
\subsection Periodic_3_triangulation_3GeometricAccess Geometric Access
|
||||
|
||||
There might be applications that need the geometric primitives of a
|
||||
triangulation as an input but do not require a simplicial complex. For
|
||||
these cases we provide the geometric iterators that return only the
|
||||
Some application might use the geometric primitives of a
|
||||
triangulation as an input but not require a simplicial complex. We provide
|
||||
for these cases the geometric iterators that return only the
|
||||
geometric primitives fulfilling some properties. In the following
|
||||
example we use the `Periodic_3_triangulation_3::Periodic_triangle_iterator` with the option
|
||||
`UNIQUE_COVER_DOMAIN`. This means that only those triangles are
|
||||
returned that have a non-empty intersection with the original domain
|
||||
of the 1-sheeted covering space, see
|
||||
Figure \ref P3Triangulation3figgeom_iterators.
|
||||
example, we use the `Periodic_3_triangulation_3::Periodic_triangle_iterator`
|
||||
with the option `UNIQUE_COVER_DOMAIN`. This means that only the triangles that
|
||||
have a non-empty intersection with the original domain of the 1-sheeted covering
|
||||
space are returned, see Figure \ref P3Triangulation3figgeom_iterators.
|
||||
The `Periodic_3_triangulation_3::Periodic_triangle` is actually a three-dimensional array of
|
||||
point-offset pairs. We check for all three entries of the periodic
|
||||
triangle whether the offset is (0,0,0) using the
|
||||
|
|
@ -423,7 +412,9 @@ exact.
|
|||
\subsection Periodic_3_triangulation_3PeriodicRegularTriangulations Periodic Regular Triangulations
|
||||
|
||||
The following four examples illustrate various features of 3D periodic
|
||||
regular triangulations.
|
||||
regular triangulations.
|
||||
|
||||
\subsubsection Periodic_3_triangulation_3P3TR3FirstExample Point insertion and vertex removal
|
||||
|
||||
The first example shows the incremental construction of a 3D regular triangulation,
|
||||
and the removal of a vertex. It uses the default parameter of the
|
||||
|
|
@ -431,22 +422,28 @@ and the removal of a vertex. It uses the default parameter of the
|
|||
|
||||
\cgalExample{Periodic_3_triangulation_3/p3rt3_insert_remove.cpp}
|
||||
|
||||
\subsubsection Periodic_3_triangulation_3P3TR3SecondExample Data structure
|
||||
|
||||
The second example shows the incremental construction of a 3D regular
|
||||
triangulation.
|
||||
It uses a more appropriate triangulation data structure, which saves some memory resources.
|
||||
|
||||
\cgalExample{Periodic_3_triangulation_3/p3rt3_insert_only.cpp}
|
||||
|
||||
\subsubsection Periodic_3_triangulation_3P3TR3ThirdExample Hidden points
|
||||
|
||||
The third example shows that points can be hidden during the incremental construction
|
||||
of a 3D regular triangulation.
|
||||
|
||||
\cgalExample{p3rt3_hidden_points.cpp}
|
||||
\cgalExample{Periodic_3_triangulation_3/p3rt3_hidden_points.cpp}
|
||||
|
||||
\subsubsection Periodic_3_triangulation_3P3TR3FourthExample Bad weights
|
||||
|
||||
Finally, the following example shows how points whose weight does not
|
||||
satisfy the precondition are handled during the incremental construction
|
||||
of a 3D regular triangulation.
|
||||
|
||||
\cgalExample{p3rt3_insert_point_with_bad_weight.cpp}
|
||||
\cgalExample{Periodic_3_triangulation_3/p3rt3_insert_point_with_bad_weight.cpp}
|
||||
|
||||
\subsection Periodic_3_triangulation_3PeriodicAlphaShapes Periodic Alpha Shapes
|
||||
|
||||
|
|
|
|||
|
|
@ -8,5 +8,5 @@
|
|||
\example Periodic_3_triangulation_3/p3rt3_insert_remove.cpp
|
||||
\example Periodic_3_triangulation_3/p3rt3_insert_only.cpp
|
||||
\example Periodic_3_triangulation_3/p3rt3_hidden_points.cpp
|
||||
\example Periodic_3_triangulation_3/p3rt3_hidden_point_with_bad_weight.cpp
|
||||
\example Periodic_3_triangulation_3/p3rt3_insert_point_with_bad_weight.cpp
|
||||
/h*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue