% +------------------------------------------------------------------------+ % | Reference manual page: Triangulation_Traits_3.tex % +------------------------------------------------------------------------+ % | 27.3.2000 Monique Teillaud % | Package: Triangulation3 % | \RCSdef{\RCSTriangulationTraitsRev}{$Id$} \RCSdefDate{\RCSTriangulationTraitsDate}{$Date$} % | %%RefPage: end of header, begin of main body % +------------------------------------------------------------------------+ \begin{ccRefConcept}{DelaunayTriangulationTraits_3} \ccDefinition The concept \ccRefName\ is the first template parameter of the class \ccc{Delaunay_triangulation_3}. It defines the geometric objects (points, segments...) forming the triangulation together with a few geometric predicates and constructions on these objects. \ccRefines \ccc{TriangulationTraits_3} In addition to the requirements described for the traits class of \ccc{Triangulation_3}, the geometric traits class of a Delaunay triangulation must fulfill the following requirements: \ccTypes \ccTwo{DelaunayTriangulationTraits_3::Object_3_xxxxx}{} \ccNestedType{Line_3}{The line type.} \ccGlue \ccNestedType{Object_3}{The object type.} \ccGlue \ccNestedType{Plane_3}{The plane type.} \ccGlue \ccNestedType{Ray_3}{The ray type.} \ccTwo{DelaunayTriangulationTraits}{} \ccNestedType{Coplanar_side_of_bounded_circle_3} {A predicate object that must provide the function operator\\ \ccc{Bounded_side operator()(Point p, Point q, Point r, Point s)},\\ which determines the bounded side of the circle defined by \ccc{p}, \ccc{q}, and \ccc{r} on which \ccc{s} lies. \ccPrecond \ccc{p}, \ccc{q}, \ccc{r}, and \ccc{s} are coplanar and \ccc{p}, \ccc{q}, and \ccc{r} are not collinear.} \ccGlue \ccNestedType{Side_of_oriented_sphere_3} {A predicate object that must provide the function operator\\ \ccc{Oriented_side operator()(Point p, Point q, Point r, Point s, Point t)},\\ which determines on which side of the oriented sphere circumscribing \ccc{p, q, r, s} the point \ccc{t} lies.} The following additional predicate is required only when the \ccc{Triangulation_hierarchy_3} is used on top of \ccc{Delaunay_triangulation_3}: \ccNestedType{Compare_distance_3} {A predicate object that must provide the function operator\\ \ccc{Comparison_result operator()(Point p, Point q, Point r)},\\ which compares the distance between \ccc{p} and \ccc{q} to the distance between \ccc{p} and \ccc{r}.} In addition, only when the dual operations are used, the traits class must provide the following constructor objects: \ccTwo{DelaunayTriangulationTraits_3}{} \ccNestedType{Construct_circumcenter_3} {A constructor object that must provide the function operator\\ \ccc{Point_3 operator()(Point_3 p, Point_3 q, Point_3 r, Point_3 s)},\\ which contructs the circumcenter of four points. \ccPrecond{\ccc{p}, \ccc{q}, \ccc{r} and \ccc{s} must be non coplanar.}\\ It must also provide the function operator\\ \ccc{Point_3 operator()(Point_3 p, Point_3 q, Point_3 r)},\\ which contructs the circumcenter of three points. \ccPrecond{\ccc{p}, \ccc{q} and \ccc{r} must be non collinear.}} \ccGlue \ccNestedType{Construct_object_3} {A constructor object that must provide the function operators\\ \ccc{Object_3 operator()(Point_3 p)},\\ \ccc{Object_3 operator()(Segment_3 s)} and\\ \ccc{Object_3 operator()(Ray_3 r)}\\ that construct an object respectively from a point, a segment and a ray.} \ccGlue \ccNestedType{Construct_perpendicular_line_3} {A constructor object that must provide the function operator\\ \ccc{Line_3 operator()(Plane_3 pl, Point_3 p)},\\ which constructs the line perpendicular to \ccc{pl} passing through \ccc{p}.} \ccGlue \ccNestedType{Construct_plane_3} {A constructor object that must provide the function operator\\ \ccc{Plane_3 operator()(Point_3 p, Point_3 q, Point_3 r)},\\ which constructs the plane passing through \ccc{p}, \ccc{q} and \ccc{r}. \ccPrecond{\ccc{p}, \ccc{q} and \ccc{r} are non collinear.}} \ccGlue \ccNestedType{Construct_ray_3} {A constructor object that must provide the function operator\\ \ccc{Ray_3 operator()(Point_3 p, Line_3 l)},\\ which constructs the ray starting at \ccc{p} with direction given by \ccc{l}.} \ccOperations The following functions give access to the predicate and construction objects: \ccThree{coplanar_side_of_bounded_circle_3xxx}{gt.xxxxxxxxx(Point p0, Point p1)x}{} \ccCreationVariable{traits} \ccMethod{Coplanar_side_of_bounded_circle_3 coplanar_side_of_bounded_circle_3_object();}{} \ccGlue \ccMethod{Side_of_oriented_sphere_3 side_of_oriented_sphere_3_object();}{} When using the triangulation hierarchy, the traits must provide: \ccMethod{Compare_distance_3 compare_distance_3_object();}{} The following functions must be provided only if the methods of \ccc{Delaunay_triangulation_3} returning elements of the Voronoi diagram are instantiated: \ccMethod{Construct_circumcenter_3 construct_circumcenter_3_object();}{} \ccGlue \ccMethod{Construct_object_3 construct_object_3_object();}{} \ccGlue \ccMethod{Construct_perpendicular_line_3 construct_perpendicular_line_object();}{} \ccGlue \ccMethod{Construct_plane_3 construct_plane_3_object();}{} \ccGlue \ccMethod{Construct_ray_3 construct_ray_3_object();}{} \ccHasModels \ccc{CGAL::Exact_predicates_inexact_constructions_kernel} (recommended)\\ \ccc{CGAL::Exact_predicates_exact_constructions_kernel} (recommended for Voronoi)\\ \ccc{CGAL::Filtered_kernel}\\ \ccc{CGAL::Cartesian}\\ \ccc{CGAL::Simple_cartesian}\\ \ccc{CGAL::Homogeneous}\\ \ccc{CGAL::Simple_homogeneous} \end{ccRefConcept}