CGAL 6.1 - 2D Triangulations on the Sphere
|
#include <CGAL/Delaunay_triangulation_on_sphere_2.h>
CGAL::Triangulation_on_sphere_2< Traits, TDS >.
The class Delaunay_triangulation_on_sphere_2
is designed to represent the Delaunay triangulation of a set of points on the 2-sphere.
A Delaunay triangulation of a set of points is a triangulation of the set of points that fulfills the following empty circle property (also called Delaunay property): the circumscribing sphere of any simplex of the triangulation contains no point of the set in its interior. For a point set with no case of co-circularity of more than three points, the Delaunay triangulation is unique, and defined as the dual of the Voronoi diagram of the points.
The setting of 3D points on the 2-sphere is particular in that the empty circle property can be reduced to a single 3D orientation test [1].
Traits | is the geometric traits; it must be a model of DelaunayTriangulationOnSphereTraits_2 . |
TDS | is the triangulation data structure, which must be a model of TriangulationDataStructure_2 whose vertex base must be a model of TriangulationOnSphereVertexBase_2 and whose face base must be a model of TriangulationOnSphereFaceBase_2 . CGAL provides a default instantiation for this parameter, which is the class CGAL::Triangulation_data_structure_2 < CGAL::Triangulation_on_sphere_vertex_base_2<Traits>, CGAL::Triangulation_on_sphere_face_base_2<Traits> > . |
CGAL::Triangulation_on_sphere_2<Traits, TDS>
Types | |
typedef Traits | Geom_traits |
The traits class. | |
typedef Traits::Point_on_sphere_2 | Point |
The point type representing a point on the sphere. | |
Creation | |
Delaunay_triangulation_on_sphere_2 (const Point_3 &c, const FT r) | |
introduces an empty triangulation and sets the center and radius of the sphere to c and r respectively. | |
Delaunay_triangulation_on_sphere_2 (const Geom_traits >=Geom_traits()) | |
introduces an empty triangulation. | |
template<typename PointOnSphereIterator > | |
Delaunay_triangulation_on_sphere_2 (PointOnSphereIterator first, PointOnSphereIterator beyond, const Point_3 ¢er, const FT radius) | |
introduces an empty triangulation, sets the center and radius of the sphere to c and r respectively, and inserts the point range [first; beyond[ . | |
template<typename PointOnSphereIterator > | |
Delaunay_triangulation_on_sphere_2 (PointOnSphereIterator first, PointOnSphereIterator beyond, const Geom_traits >=Geom_traits()) | |
introduces an empty triangulation whose center and radius are set according to values within the traits and inserts the point range [first;beyond[ . | |
Delaunay_triangulation_on_sphere_2 (const Delaunay_triangulation_on_sphere_2< Traits, TDS > &tr) | |
Copy constructor. | |
Predicates | |
Oriented_side | side_of_oriented_circle (Face_handle f, const Point &p) const |
returns the side of p with respect to the circle circumscribing the triangle associated with f . | |
Insertion and Removal | |
Methods for the insertion and removal of points on the sphere. In the degenerate setting of co-circular points, the Delaunay triangulation is known not to be uniquely defined. In this case, CGAL chooses a particular Delaunay triangulation using a symbolic perturbation scheme [2]. | |
Vertex_handle | insert (const Point &p, Face_handle f=Face_handle()) |
inserts the point p . | |
Vertex_handle | insert (const Point &p, Locate_type <, Face_handle loc, int li) |
inserts the point p at the location given by (lt, loc, li) . | |
Vertex_handle | push_back (const Point &p) |
Equivalent to insert(p) . | |
template<class PointOnSphereIterator > | |
size_type | insert (PointOnSphereIterator first, PointOnSphereIterator beyond) |
inserts the points in the range [first, beyond) and returns the number of inserted points. | |
void | remove (Vertex_handle v) |
removes the vertex v from the triangulation. | |
Queries | |
template<typename OutputItFaces , typename OutputItBoundaryEdges > | |
std::pair< OutputItFaces, OutputItBoundaryEdges > | get_conflicts_and_boundary (const Point &p, OutputItFaces fit, OutputItBoundaryEdges eit, Face_handle start) const |
outputs the faces and boundary edges of the conflict zone of point p into output iterators. | |
Voronoi Diagram | |
The following member functions provide the elements of the dual Voronoi diagram. Two different embeddings are possible: a "straight" embedding, using line segments living in Euclidean 3D sphere, and a "curved" embedding, using arc segments on the sphere. Note that the following operations are constructions, which should be kept in mind in the choice of the underlying kernel. | |
Point_3 | dual (const Face_handle f) const |
returns the center of the circle circumscribed to face f | |
Segment_3 | dual (const Edge &e) const |
returns the line segment with endpoints the circumcenters of the faces incident to the edge e . | |
Segment_3 | dual (const Edge_circulator ec) const |
returns the line segment with endpoints the circumcenters of the faces incident to the edge *ec . | |
Segment_3 | dual (const All_edges_iterator ei) const |
returns the line segment with endpoints the circumcenters of the faces incident to the edge *ei . | |
Point | dual_on_sphere (const Face_handle f) const |
returns the intersection of the dual of the face f and the sphere. | |
Arc_on_sphere_2 | dual_on_sphere (const Edge &e) const |
returns the arc of great circle with endpoints the circumcenters of the faces incident to the edge e . | |
Arc_on_sphere_2 | dual_on_sphere (const Edge_circulator ec) const |
returns the arc of great circle with endpoints the circumcenters of the faces incident to the edge *ec . | |
Arc_on_sphere_2 | dual_on_sphere (const All_edges_iterator ei) const |
returns the arc of great circle with endpoints the circumcenters of the faces incident to the edge *ei . | |
Miscellaneous | |
bool | is_valid (bool verbose=false, int level=0) const |
tests the validity of the triangulation as a Triangulation_on_sphere_2 and additionally tests the Delaunay property. | |
Additional Inherited Members | |
Public Types inherited from CGAL::Triangulation_on_sphere_2< Traits, TDS > | |
enum | Locate_type { VERTEX =0 , EDGE , FACE , OUTSIDE_CONVEX_HULL , OUTSIDE_AFFINE_HULL , NOT_ON_SPHERE , TOO_CLOSE } |
specifies which case occurs when locating a query point in the triangulation. More... | |
typedef Traits | Geom_traits |
The traits class. | |
typedef TDS | Triangulation_data_structure |
The triangulation data structure type. | |
typedef Triangulation_data_structure::size_type | size_type |
Size type (an unsigned integral type). | |
typedef Traits::FT | FT |
The number type. | |
typedef Traits::Point_on_sphere_2 | Point |
The point type representing a point on the sphere. | |
typedef Traits::Point_3 | Point_3 |
The 3D point type. | |
typedef Traits::Segment_3 | Segment_3 |
The 3D segment type. | |
typedef Traits::Triangle_3 | Triangle_3 |
The 3D triangle type. | |
typedef Traits::Arc_on_sphere_2 | Arc_on_sphere_2 |
An arc of a great circle, used to represent a curved segment (Voronoi or Delaunay edge). | |
typedef TDS::Vertex | Vertex |
The vertex type. | |
typedef TDS::Edge | Edge |
The edge type. | |
typedef TDS::Face | Face |
The face type. | |
typedef TDS::Vertex_handle | Vertex_handle |
Handle to a vertex. | |
typedef TDS::Face_handle | Face_handle |
Handle to a face. | |
typedef TDS::Vertex_iterator | Vertices_iterator |
Iterator over all vertices. | |
typedef Iterator_range< unspecified_type > | Vertex_handles |
Range type for iterating over all vertices, with a nested type iterator that has as value type Vertex_handle . | |
typedef TDS::Edge_iterator | All_edges_iterator |
Iterator over all edges. | |
typedef Iterator_range< All_edges_iterator > | All_edges |
Range type for iterating over all edges (including non-solid ones). | |
typedef TDS::Face_iterator | All_faces_iterator |
Iterator over all faces. | |
typedef Iterator_range< All_faces_iterator > | All_face_handles |
Range type for iterating over all faces (including ghost faces), with a nested type iterator that has as value type Face_handle . | |
typedef unspecified_type | Solid_edges_iterator |
Iterator over all solid edges. | |
typedef Iterator_range< Solid_edges_iterator > | Solid_edges |
Range type for iterating over all solid edges. | |
typedef unspecified_type | Solid_faces_iterator |
Iterator over all solid faces. | |
typedef Iterator_range< unspecified_type > | Solid_face_handles |
Range type for iterating over solid faces, with a nested type iterator that has as value type Face_handle . | |
typedef unspecified_type | Vertex_circulator |
Circulator over all vertices incident to a given vertex. | |
typedef unspecified_type | Edge_circulator |
Circulator over all edges incident to a given vertex. | |
typedef unspecified_type | Face_circulator |
Circulator over all faces incident to a given vertex. | |
typedef unspecified_type | Point_iterator |
Iterator over the points corresponding the vertices of the triangulation. | |
typedef Iterator_range< Point_iterator > | Points |
Range type for iterating over the points of the finite vertices. | |
Public Member Functions inherited from CGAL::Triangulation_on_sphere_2< Traits, TDS > | |
Face_handle | locate (const Point &query, Face_handle f=Face_handle()) const |
locates the point query in the triangulation, and returns information on this location. | |
Face_handle | locate (const Point &query, Locate_type <, int &li, Face_handle h=Face_handle()) const |
Same as above. | |
Triangulation_on_sphere_2 (const Traits >=Traits()) | |
constructs an empty triangulation. | |
Triangulation_on_sphere_2 (const Point_3 &c, const FT r) | |
constructs an empty triangulation and sets the center and radius to c and r respectively. | |
Triangulation_on_sphere_2 (const Triangulation_on_sphere_2 &tr) | |
Copy constructor. | |
Triangulation_on_sphere_2 & | operator= (Triangulation_on_sphere_2< Traits, TDS > tr) |
Assignment operator. | |
void | swap (Triangulation_on_sphere_2 &tr) |
The triangulations tr and *this are swapped. | |
void | clear () |
deletes all faces and vertices, resulting in an empty triangulation. | |
bool | is_ghost (const Face_handle f) const |
returns true if f is a ghost face, and false otherwise. | |
bool | is_ghost (const Edge &e) const |
returns true if e is a ghost edge, that is if both its incident faces are ghost faces, and false otherwise. | |
void | set_center (const Point_3 &c) |
void | set_radius (const FT radius) |
void | set_center_and_radius (const Point_3 &c, const FT radius) |
int | dimension () const |
returns: | |
const Geom_traits & | geom_traits () const |
returns a const reference to the triangulation traits object. | |
const Triangulation_data_structure & | tds () const |
returns a const reference to the triangulation data structure. | |
size_type | number_of_vertices () const |
returns the number of vertices. | |
size_type | number_of_faces () const |
returns the number of faces. | |
size_type | number_of_ghost_faces () const |
returns the number of ghost faces. | |
size_type | number_of_solid_faces () const |
returns the number of solid faces. | |
const Point & | point (const Vertex_handle v) |
returns the geometric position of the vertex v . | |
const Point & | point (const Face_handle f, const int i) |
returns the geometric position of the i -th vertex of the face f . | |
Segment_3 | segment (const Edge &e) const |
returns the 3D line segment formed by the vertices of the edge e . | |
Segment_3 | segment (const Face_handle f, int i) const |
returns the 3D line segment formed by the vertices of the edge (f, i) . | |
Arc_on_sphere_2 | segment_on_sphere (const Edge &e) const |
returns the great circle arc formed by the vertices of the edge e . | |
Arc_on_sphere_2 | segment_on_sphere (const Face_handle f, int i) const |
returns the great circle arc formed by the vertices of the edge (f, i) . | |
Triangle_3 | triangle (const Face_handle f) const |
returns the 3D triangle formed by the three vertices of the face f . | |
Vertices_iterator | vertices_begin () const |
Starts at an arbitrary vertex. | |
Vertices_iterator | vertices_end () const |
Past-the-end iterator. | |
Vertex_handles | vertex_handles () const |
returns a range of iterators over all vertices. | |
All_edges_iterator | all_edges_begin () const |
Starts at an arbitrary edge. | |
All_edges_iterator | all_edges_end () const |
Past-the-end iterator. | |
All_edges | all_edges () const |
returns a range of iterators over all edges. | |
All_faces_iterator | all_faces_begin () const |
Starts at an arbitrary face. | |
All_faces_iterator | all_faces_end () const |
Past-the-end iterator. | |
All_face_handles | all_face_handles () const |
returns a range of iterators over all faces. | |
Solid_faces_iterator | solid_faces_begin () const |
Starts at an arbitrary face. | |
Solid_faces_iterator | solid_faces_end () const |
Past-the-end iterator. | |
Solid_face_handles | solid_face_handles () const |
returns a range of iterators over all solid faces. | |
Solid_edges_iterator | solid_edges_begin () const |
Starts at an arbitrary face. | |
Solid_edges_iterator | solid_edges_end () const |
Past-the-end iterator. | |
Solid_edges | solid_edges () const |
returns a range of iterators over all solid edges. | |
Points | points () const |
returns a range of iterators over all the points of the triangulations. | |
Vertex_circulator | adjacent_vertices (Vertex_handle v) const |
Starts at an arbitrary vertex adjacent to the vertex v . | |
Vertex_circulator | adjacent_vertices (Vertex_handle v, Face_handle f) |
Starts at the first vertex of f adjacent to v in counterclockwise order around v . | |
Edge_circulator | incident_edges (Vertex_handle v) const |
Starts at an arbitrary edge incident to the vertex v . | |
Edge_circulator | incident_edges (Vertex_handle v, Face_handle f) const |
Starts at the first edge of f incident to v , in counterclockwise order around v . | |
Face_circulator | incident_faces (Vertex_handle v) const |
Starts at an arbitrary face incident to the vertex v . | |
Face_circulator | incident_faces (Vertex_handle v, Face_handle f) const |
Starts at face f . | |
bool | is_edge (Vertex_handle va, Vertex_handle vb) |
returns true if there exists an edge (ghost or solid) having va and vb as vertices. | |
bool | is_edge (Vertex_handle va, Vertex_handle vb, Face_handle &fr, int &i) |
returns true if there exists an edge (ghost or solid) having va and vb as vertices. | |
bool | is_face (Vertex_handle v1, Vertex_handle v2, Vertex_handle v3) |
returns true if there exists a face (ghost or solid) having v1 , v2 and v3 as vertices. | |
bool | is_face (Vertex_handle v1, Vertex_handle v2, Vertex_handle v3, Face_handle &fr) |
returns true if there exists a face (ghost or solid) having v1 , v2 and v3 as vertices. | |
bool | is_valid (bool verbose=false, int level=0) const |
tests the validity of the triangulation as a Triangulation_on_sphere_2 . | |
Public Member Functions inherited from CGAL::Triangulation_cw_ccw_2 | |
Triangulation_cw_ccw_2 () | |
int | ccw (const int i) const |
int | cw (const int i) const |
CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::Delaunay_triangulation_on_sphere_2 | ( | const Geom_traits & | gt = Geom_traits() | ) |
introduces an empty triangulation.
gt
is provided) or must be set after the construction, using the function set_center_and_radius()
. CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::Delaunay_triangulation_on_sphere_2 | ( | PointOnSphereIterator | first, |
PointOnSphereIterator | beyond, | ||
const Point_3 & | center, | ||
const FT | radius | ||
) |
introduces an empty triangulation, sets the center and radius of the sphere to c
and r
respectively, and inserts the point range [first; beyond[
.
PointOnSphereIterator | must be a model of InputIterator with value type Point_on_sphere_2 or Point_3 . |
CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::Delaunay_triangulation_on_sphere_2 | ( | PointOnSphereIterator | first, |
PointOnSphereIterator | beyond, | ||
const Geom_traits & | gt = Geom_traits() |
||
) |
introduces an empty triangulation whose center and radius are set according to values within the traits and inserts the point range [first;beyond[
.
gt
.PointOnSphereIterator | must be a model of InputIterator with value type Point_on_sphere_2 or Point_3 . |
CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::Delaunay_triangulation_on_sphere_2 | ( | const Delaunay_triangulation_on_sphere_2< Traits, TDS > & | tr | ) |
Copy constructor.
All the vertices and faces are duplicated.
Arc_on_sphere_2 CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::dual_on_sphere | ( | const All_edges_iterator | ei | ) | const |
returns the arc of great circle with endpoints the circumcenters of the faces incident to the edge *ei
.
dimension() == 2
and *ei
is not a ghost edge. Arc_on_sphere_2 CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::dual_on_sphere | ( | const Edge & | e | ) | const |
returns the arc of great circle with endpoints the circumcenters of the faces incident to the edge e
.
dimension() == 2
and e
is not a ghost edge. Arc_on_sphere_2 CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::dual_on_sphere | ( | const Edge_circulator | ec | ) | const |
returns the arc of great circle with endpoints the circumcenters of the faces incident to the edge *ec
.
dimension() == 2
and *ec
is not a ghost edge. Point CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::dual_on_sphere | ( | const Face_handle | f | ) | const |
returns the intersection of the dual of the face f
and the sphere.
dimension() == 2
and f
is a solid face. std::pair< OutputItFaces, OutputItBoundaryEdges > CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::get_conflicts_and_boundary | ( | const Point & | p, |
OutputItFaces | fit, | ||
OutputItBoundaryEdges | eit, | ||
Face_handle | start | ||
) | const |
outputs the faces and boundary edges of the conflict zone of point p
into output iterators.
This function outputs in the container pointed to by fit
the faces which are in conflict with point p
, i. e., the faces whose circumcircle contains p
. It outputs in the container pointed to by eit
the boundary of the zone in conflict with p
. The boundary edges of the conflict zone are output in counter-clockwise order and each edge is described through its incident face which is not in conflict with p
. The function returns in a std::pair
the resulting output iterators.
OutItFaces | is an output iterator with Face_handle as value type. |
OutItBoundaryEdges | is an output iterator with Edge as value type. |
tds_data
(see the concept TriangulationDSFaceBase_2
) of the face to mark faces in conflict. It is the responsibility of the user to make sure the flags are cleared.dimension() == 2
. Vertex_handle CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::insert | ( | const Point & | p, |
Face_handle | f = Face_handle() |
||
) |
inserts the point p
.
If the point p
coincides with an already existing vertex, this vertex is returned and the triangulation remains unchanged. The optional parameter f
is used to give a hint about the location of p
.
Vertex_handle CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::insert | ( | const Point & | p, |
Locate_type & | lt, | ||
Face_handle | loc, | ||
int | li | ||
) |
inserts the point p
at the location given by (lt, loc, li)
.
size_type CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::insert | ( | PointOnSphereIterator | first, |
PointOnSphereIterator | beyond | ||
) |
inserts the points in the range [first, beyond)
and returns the number of inserted points.
PointOnSphereIterator | must be a model of InputIterator with value type Point . |
bool CGAL::Delaunay_triangulation_on_sphere_2< Traits, TDS >::is_valid | ( | bool | verbose = false , |
int | level = 0 |
||
) | const |
tests the validity of the triangulation as a Triangulation_on_sphere_2
and additionally tests the Delaunay property.
This method is mainly useful for debugging Delaunay triangulation algorithms.