CGAL 4.6.1 - dD Triangulations
|
#include <CGAL/Triangulation.h>
This class implements triangulations of point sets in dimensions \( d \).
The triangulation covers the convex hull of the input points (the embedded vertices of the triangulation).
To store this triangulation in a triangulation data structure, we turn the set of its faces into a topological sphere by adding a fictitious vertex, called the infinite vertex, as well as infinite simplices incident to boundary faces of the convex hull. Each infinite \( i\)-simplex is incident to the infinite vertex and to an \( (i-1)\)-simplex of the convex hull boundary.
TriangulationTraits
is the geometric traits class that provides the geometric types and predicates needed by triangulations. TriangulationTraits
must be a model of the concept TriangulationTraits
.
The parameter TriangulationDataStructure
must be a model of the concept TriangulationDataStructure
. This model is used to store the faces of the triangulation. The parameter TriangulationDataStructure
defaults to Triangulation_data_structure
whose template parameters are instantiated as follows:
DelaunayTriangulationTraits::Dimension
Triangulation_vertex<DelaunayTriangulationTraits>
Triangulation_full_cell<DelaunayTriangulationTraits>
. The triangulation deduces its maximal dimension from the type TriangulationTraits::Dimension
. This dimension has to match the dimension returned by TriangulationDataStructure::maximal_dimension()
.
The information in the iostream
is: the current dimension, the number of finite vertices, the non-combinatorial information about vertices (point, etc.), the number of full cells, the indices of the vertices of each full cell, plus the non-combinatorial information about each full cell, then the indices of the neighbors of each full cell, where the index corresponds to the preceding list of full cells.
Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>
Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>
Types | |
typedef TriangulationTraits | Geom_traits |
Type for the model of the TriangulationTraits concept. | |
typedef TriangulationTraits::Point_d | Point |
A point in Euclidean space. | |
typedef TriangulationTraits::Dimension | Maximal_dimension |
This indicates whether the maximal dimension is static (i.e. if the type of Maximal_dimension is CGAL::Dimension_tag<int dim> ) or dynamic (i.e. if the type of Maximal_dimension is CGAL::Dynamic_dimension_tag ). More... | |
typedef TriangulationDataStructure | Triangulation_ds |
The second template parameter: the triangulation data structure. | |
typedef TriangulationDataStructure::Vertex | Vertex |
A model of the concept TriangulationVertex . | |
typedef TriangulationDataStructure::Full_cell | Full_cell |
A model of the concept TriangulationFullCell . | |
typedef TriangulationDataStructure::Facet | Facet |
The facet class. | |
typedef TriangulationDataStructure::Face | Face |
A model of the concept TriangulationDSFace . | |
Handles and Iterators | |
The vertices and full cells of triangulations are accessed through handles and iterators. A handle is a model of the | |
enum | Locate_type { ON_VERTEX =0, IN_FACE, IN_FACET, IN_FULL_CELL, OUTSIDE_CONVEX_HULL, OUTSIDE_AFFINE_HULL } |
specifies which case occurs when locating a point in the triangulation. More... | |
typedef TriangulationDataStructure::Vertex_handle | Vertex_handle |
handle to a a vertex | |
typedef TriangulationDataStructure::Vertex_const_handle | Vertex_const_handle |
const handle to a a vertex | |
typedef TriangulationDataStructure::Vertex_iterator | Vertex_iterator |
iterator over all vertices (including the infinite one) | |
typedef TriangulationDataStructure::Vertex_const_iterator | Vertex_const_iterator |
const iterator over all vertices (including the infinite one) | |
typedef unspecified_type | Finite_vertex_iterator |
iterator over finite vertices | |
typedef unspecified_type | Finite_vertex_const_iterator |
const iterator over finite vertices | |
typedef TriangulationDataStructure::Full_cell_handle | Full_cell_handle |
handle to a full cell | |
typedef TriangulationDataStructure::Full_cell_const_handle | Full_cell_const_handle |
const handle to a full cell | |
typedef TriangulationDataStructure::Full_cell_iterator | Full_cell_iterator |
iterator over all full cells (including the infinite ones) | |
typedef TriangulationDataStructure::Full_cell_const_iterator | Full_cell_const_iterator |
const iterator over all full cells (including the infinite ones) | |
typedef unspecified_type | Finite_full_cell_iterator |
iterator over finite full cells | |
typedef unspecified_type | Finite_full_cell_const_iterator |
const iterator over finite full cells | |
typedef TriangulationDataStructure::Facet_iterator | Facet_iterator |
iterator over all facets (including the infinite ones) | |
typedef unspecified_type | Finite_facet_iterator |
iterator over finite facets | |
typedef TriangulationDataStructure::size_type | size_type |
Size type (an unsigned integral type). | |
typedef TriangulationDataStructure::difference_type | difference_type |
Difference type (a signed integral type). | |
Creation | |
Triangulation (const int dim, const Geom_traits >=Geom_traits()) | |
Instantiates a triangulation with one vertex (the vertex at infinity). More... | |
Triangulation (const Triangulation &t2) | |
The copy constructor. | |
Access functions | |
const Triangulation_ds & | tds () const |
Triangulation_ds & | tds () |
Returns a non-const reference to the underlying triangulation data structure. | |
const Geom_traits & | geom_traits () const |
Returns a const reference to the geometric traits instance. | |
int | maximal_dimension () const |
Returns the maximal dimension of the full dimensional cells that can be stored in the triangulation. | |
int | current_dimension () const |
Returns the dimension of the triangulation (as an embedded manifold). | |
bool | empty () const |
Returns true if the triangulation has no finite vertex. More... | |
size_type | number_of_vertices () const |
Returns the number of finite vertices in the triangulation. | |
size_type | number_of_full_cells () const |
Returns the number of full cells of maximal dimension in the triangulation (full cells incident to the vertex at infinity are counted). | |
Vertex_handle | infinite_vertex () const |
Returns a handle to the vertex at infinity. | |
Full_cell_handle | infinite_full_cell () const |
Returns a handle to some full cell incident to the vertex at infinity. | |
Non-constant-time access functions | |
size_type | number_of_finite_full_cells () const |
Returns the number of full cells of maximal dimension that are not incident to the vertex at infinity. | |
Tests for finite and infinite elements | |
bool | is_infinite (const Vertex_handle v) const |
Returns true if and only if the vertex v is the infinite vertex. | |
bool | is_infinite (const Full_cell_handle c) const |
Returns true if and only if c is incident to the infinite vertex. | |
bool | is_infinite (const Facet &ft) const |
Returns true if and only if facet ft is incident to the infinite vertex. | |
bool | is_infinite (const Face &f) const |
Returns true if and only if the face f is incident to the infinite vertex. | |
Faces and Facets | |
Full_cell_handle | full_cell (const Facet &f) const |
Returns a full cell containing the facet f | |
int | index_of_covertex (const Facet &f) const |
Returns the index of the vertex of the full cell c=tr.full_cell(f) which does not belong to c . | |
Triangulation traversal | |
Vertex_iterator | vertices_begin () |
The first vertex of tr . | |
Vertex_iterator | vertices_end () |
The beyond vertex of tr . | |
Finite_vertex_iterator | finite_vertices_begin () |
The first finite vertex of tr . | |
Finite_vertex_iterator | finite_vertices_end () |
The beyond finite vertex of tr . | |
Full_cell_iterator | full_cells_begin () |
The first full cell of tr . | |
Full_cell_iterator | full_cells_end () |
The beyond full cell of tr . | |
Finite_full_cell_iterator | finite_full_cells_begin () |
The first finite full cell of tr . | |
Finite_full_cell_iterator | finite_full_cells_end () |
The beyond finite full cell of tr . | |
Facet_iterator | facets_begin () |
Iterator to the first facet of the triangulation. | |
Facet_iterator | facets_end () |
Iterator to the beyond facet of the triangulation. | |
Finite_facet_iterator | finite_facets_begin () |
Iterator to the first finite facet of the triangulation. | |
Finite_facet_iterator | finite_facets_end () |
Iterator to the beyond finite facet of the triangulation. | |
Point location | |
The class | |
Full_cell_handle | locate (const Point &query, Full_cell_handle hint=Full_cell_handle()) const |
The optional argument hint is used as a starting place for the search. More... | |
Full_cell_handle | locate (const Point &query, Vertex_handle hint) const |
Same as above but hint is a vertex and not a full cell. | |
Full_cell_handle | locate (const Point &query, Locate_type &loc_type, Face &f, Facet &ft, Full_cell_handle hint=Full_cell_handle()) const |
The optional argument hint is used as a starting place for the search. More... | |
Full_cell_handle | locate (const Point &query, Locate_type &loc_type, Face &f, Vertex_handle hint) const |
Same as above but hint , the starting place for the search, is a vertex. More... | |
Removal | |
Vertex_handle | collapse_face (const Point &p, const Face &f) |
Point insertion | |
The class | |
template<typename ForwardIterator > | |
size_type | insert (ForwardIterator s, ForwardIterator e) |
Inserts the points found in range [s,e) in the triangulation. More... | |
Vertex_handle | insert (const Point p, Full_cell_handle hint=Full_cell_handle()) |
Inserts point p in the triangulation. More... | |
Vertex_handle | insert (const Point p, Vertex_handle hint) |
Same as above but uses a vertex hint as the starting place for the search. | |
Vertex_handle | insert (const Point p, Locate_type loc_type, Face &f, Facet &ft, Full_cell_handle c) |
Advanced Inserts point p into the triangulation and returns a handle to the Vertex at that position. More... | |
template<typename ForwardIterator , typename OutputIterator > | |
Vertex_handle | insert_in_hole (const Point &p, ForwardIterator s, ForwardIterator e, const Facet &ft, OutputIterator out) |
Advanced Removes the full cells in the range \( C=\)[s, e) , inserts a vertex at position p and fills the hole by connecting each face of the boundary to p . More... | |
template<typename ForwardIterator > | |
Vertex_handle | insert_in_hole (const Point &p, ForwardIterator s, ForwardIterator e, const Facet &ft) |
Vertex_handle | insert_in_face (const Point &p, const Face &f) |
Vertex_handle | insert_in_facet (const Point &p, const Facet &ft) |
Vertex_handle | insert_in_full_cell (const Point &p, Full_cell_handle c) |
Vertex_handle | insert_outside_convex_hull (const Point &, Full_cell_handle c) |
Vertex_handle | insert_outside_affine_hull (const Point &) |
Validity check | |
bool | is_valid (bool verbose=false) const |
This is a function for debugging purpose. More... | |
bool | are_incident_full_cells_valid (Vertex_const_handle v, bool verbose=false) const |
This is a function for debugging purpose. More... | |
Input/output | |
std::istream & | operator>> (std::istream &is, Triangulation &t) |
Reads the underlying combinatorial triangulation from is by calling the corresponding input operator of the triangulation data structure class (note that the infinite vertex is numbered 0), and the non-combinatorial information by calling the corresponding input operators of the vertex and the full cell classes (such as point coordinates), which are provided by overloading the stream operators of the vertex and full cell types. More... | |
std::ostream & | operator<< (std::ostream &os, const Triangulation &t) |
Writes the triangulation t into os . | |
typedef TriangulationTraits::Dimension CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::Maximal_dimension |
This indicates whether the maximal dimension is static (i.e. if the type of Maximal_dimension
is CGAL::Dimension_tag<int dim>
) or dynamic (i.e. if the type of Maximal_dimension
is CGAL::Dynamic_dimension_tag
).
In the latter case, the dim
parameter passed to the class's constructor is used.
enum CGAL::Triangulation::Locate_type |
specifies which case occurs when locating a point in the triangulation.
Enumerator | |
---|---|
ON_VERTEX |
when the located point coincides with a vertex of the triangulation |
IN_FACE |
when the point is in the interior of a face of dimension equal or less than |
IN_FACET |
when the point is in the interior of a facet |
IN_FULL_CELL |
when the point is in the interior of a full cell |
OUTSIDE_CONVEX_HULL |
when the point is outside the convex hull but in the affine hull of the current triangulation |
OUTSIDE_AFFINE_HULL |
when the point is outside the affine hull of the current triangulation. |
CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::Triangulation | ( | const int | dim, |
const Geom_traits & | gt = Geom_traits() |
||
) |
Instantiates a triangulation with one vertex (the vertex at infinity).
See the description of the nested type Maximal_dimension
above for an explanation of the use of the parameter dim
. The triangulation stores a copy of the geometric traits gt
.
bool CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::are_incident_full_cells_valid | ( | Vertex_const_handle | v, |
bool | verbose = false |
||
) | const |
This is a function for debugging purpose.
Returns true
if and only if all finite full cells incident to v
have positive orientation. The verbose
parameter is not used.
Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::collapse_face | ( | const Point & | p, |
const Face & | f | ||
) |
Face f
to a single vertex at position p
.
Returns a handle to that vertex.
f
must be a triangulation of a sphere of dimension tr
.current_dimension()
). bool CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::empty | ( | ) | const |
Returns true
if the triangulation has no finite vertex.
Returns false
otherwise.
size_type CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert | ( | ForwardIterator | s, |
ForwardIterator | e | ||
) |
Inserts the points found in range [s,e)
in the triangulation.
Returns the number of vertices actually inserted. (If several vertices share the same position in space, only the vertex that was actually inserted is counted.)
ForwardIterator | must be an input iterator with the value type Point . |
Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert | ( | const Point | p, |
Full_cell_handle | hint = Full_cell_handle() |
||
) |
Inserts point p
in the triangulation.
Returns a Vertex_handle
to the vertex of the triangulation with position p
. Prior to the actual insertion, p
is located in the triangulation; hint
is used as a starting place for locating p
.
Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert | ( | const Point | p, |
Locate_type | loc_type, | ||
Face & | f, | ||
Facet & | ft, | ||
Full_cell_handle | c | ||
) |
p
into the triangulation and returns a handle to the Vertex
at that position.
The action taken depends on the value of loc_type
:
ON_VERTEX
Vertex
described by f
is set to p
. IN_FACE
p
is inserted in the Face f
. IN_FACET
p
is inserted in the Facet ft
. p
is inserted in the triangulation according to the value of loc_type
, using the full cell c
. This method is used internally by the other insert()
methods.
Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert_in_face | ( | const Point & | p, |
const Face & | f | ||
) |
p
in the triangulation.
p
must lie in the relative interior of f
. Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert_in_facet | ( | const Point & | p, |
const Facet & | ft | ||
) |
p
in the triangulation.
p
must lie in the relative interior of ft
. Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert_in_full_cell | ( | const Point & | p, |
Full_cell_handle | c | ||
) |
p
in the triangulation.
p
must lie in the interior of c
. Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert_in_hole | ( | const Point & | p, |
ForwardIterator | s, | ||
ForwardIterator | e, | ||
const Facet & | ft, | ||
OutputIterator | out | ||
) |
[s, e)
, inserts a vertex at position p
and fills the hole by connecting each face of the boundary to p
.
A Vertex_handle
to the new Vertex
is returned. The facet ft
must lie on the boundary of \( C\) and its defining full cell, tr
.full_cell(ft)
must lie inside \( C\). Handles to the newly created full cells are output in the out
output iterator.
p
in its interior and must not contain any vertex of the triangulation. Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert_in_hole | ( | const Point & | p, |
ForwardIterator | s, | ||
ForwardIterator | e, | ||
const Facet & | ft | ||
) |
Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert_outside_affine_hull | ( | const Point & | ) |
p
in the triangulation.
p
must lie outside the affine hull of tr
. Vertex_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::insert_outside_convex_hull | ( | const Point & | , |
Full_cell_handle | c | ||
) |
p
in the triangulation.
p
must lie outside the convex hull of tr
. The half-space defined by the infinite full cell c
must contain p
. bool CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::is_valid | ( | bool | verbose = false ) | const |
This is a function for debugging purpose.
Partially checks whether tr
is a triangulation. This function returns true
if the combinatorial triangulation data structure's is_valid()
test returns true
and if some geometric tests are passed with success. It is checked that the orientation of each finite full cell is positive and that the orientation of each infinite full cell is consistent with their finite adjacent full cells. The verbose
parameter is not used.
Full_cell_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::locate | ( | const Point & | query, |
Full_cell_handle | hint = Full_cell_handle() |
||
) | const |
The optional argument hint
is used as a starting place for the search.
If the query
point lies outside the affine hull of the points (which can happen when tr
.current_dimension() <
tr
.maximal_dimension()
) or if there is no finite vertex yet in the triangulation, then locate returns a default constructed Full_cell_handle()
.
If the point query
lies in the interior of a bounded (finite) full cell of tr
, the latter full cell is returned.
If query
lies on the boundary of some finite full cells, one of the cells is returned.
Let \( d=\)tr
.current_dimension()
. If the point query
lies outside the convex hull of the points, an infinite full cell with vertices \( \{ p_1, p_2, \ldots, p_d, \infty\}\) is returned such that the full cell \( (p_1, p_2, \ldots, p_d, query)\) is positively oriented (the rest of the triangulation lies on the other side of facet \( (p_1, p_2, \ldots, p_d)\)).
Full_cell_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::locate | ( | const Point & | query, |
Locate_type & | loc_type, | ||
Face & | f, | ||
Facet & | ft, | ||
Full_cell_handle | hint = Full_cell_handle() |
||
) | const |
The optional argument hint
is used as a starting place for the search.
If the query
point lies outside the affine hull of the points (which can happen when tr
.current_dimension() <
tr
.maximal_dimension()
) or if there is no finite vertex yet in the triangulation, then loc_type
is set to OUTSIDE_AFFINE_HULL
, and locate returns Full_cell_handle()
. If the query
point lies inside the affine hull of the points, the function finds the \( k\)-face that contains query
in its relative interior (if the \( k\)-face is finite, it is unique) and the result is returned as follows:
loc_type
is set to ON_VERTEX
, f
is set to the vertex v
the query
lies on and a full cell having v
as a vertex is returned. c.current_dimension()-1
loc_type
is set to IN_FACE
, f
is set to the unique finite face containing the query
point. A full cell having f
on its boundary is returned. c.current_dimension()-1
loc_type
is set to IN_FACET
, ft
is set to one of the two representation of the finite facet containing the query
point. The full cell of ft
is returned. c.current_dimension()
query
point lies outside the convex hull of the points in the triangulation, then loc_type
is set to OUTSIDE_CONVEX_HULL
and a full cell is returned as in the locate
method above. If the query
point lies inside the convex hull of the points in the triangulation, then loc_type
is set to IN_FULL_CELL
and the unique full cell containing the query
point is returned. Full_cell_handle CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::locate | ( | const Point & | query, |
Locate_type & | loc_type, | ||
Face & | f, | ||
Vertex_handle | hint | ||
) | const |
Same as above but hint
, the starting place for the search, is a vertex.
The parameter hint
is ignored if it is a default constructed Vertex_handle()
.
std::istream& CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::operator>> | ( | std::istream & | is, |
Triangulation< TriangulationTraits, TriangulationDataStructure > & | t | ||
) |
Reads the underlying combinatorial triangulation from is
by calling the corresponding input operator of the triangulation data structure class (note that the infinite vertex is numbered 0), and the non-combinatorial information by calling the corresponding input operators of the vertex and the full cell classes (such as point coordinates), which are provided by overloading the stream operators of the vertex and full cell types.
Assigns the resulting triangulation to t
.
const Triangulation_ds& CGAL::Triangulation< TriangulationTraits, TriangulationDataStructure >::tds | ( | ) | const |