CGAL 4.4 - 3D Triangulations
|
The concept RegularTriangulationTraits_3
is the first template parameter of the class Regular_triangulation_3
. It defines the geometric objects (points, segments...) forming the triangulation together with a few geometric predicates and constructions on these objects.
In addition to the requirements described for the traits class of Triangulation_3, the geometric traits class of Regular_triangulation_3 must fulfill the following requirements.
Types | |
typedef unspecified_type | Line_3 |
The line type. | |
typedef unspecified_type | Object_3 |
The object type. | |
typedef unspecified_type | Plane_3 |
The plane type. | |
typedef unspecified_type | Ray_3 |
The ray type. | |
We use here the same notation as in Section Regular Triangulation. To simplify notation, \( p\) will often denote in the sequel either the point \( p\in\mathbb{R}^3\) or the weighted point \( {p}^{(w)}=(p,w_p)\). | |
typedef unspecified_type | Weighted_point_3 |
The weighted point type. | |
typedef unspecified_type | Bare_point |
The (un-weighted) point type. | |
typedef unspecified_type | Power_test_3 |
A predicate object which must provide the following function operators: More... | |
typedef unspecified_type | Compare_power_distance_3 |
A predicate object that must provide the function operator. More... | |
typedef unspecified_type | Construct_weighted_circumcenter_3 |
A constructor type. More... | |
typedef unspecified_type | Construct_object_3 |
A constructor object that must provide the function operators. More... | |
typedef unspecified_type | Construct_perpendicular_line_3 |
A constructor object that must provide the function operator. More... | |
typedef unspecified_type | Construct_plane_3 |
A constructor object that must provide the function operator. More... | |
typedef unspecified_type | Construct_ray_3 |
A constructor object that must provide the function operator. More... | |
Operations | |
Power_test_3 | power_test_3_object () |
/*! The following functions must be provided only if the member functions of | |
*Construct_weighted_circumcenter_3 | construct_weighted_circumcenter_3_object () |
Construct_object_3 | construct_object_3_object () |
Construct_perpendicular_line_3 | construct_perpendicular_line_object () |
Construct_plane_3 | construct_plane_3_object () |
Construct_ray_3 | construct_ray_3_object () |
A predicate object that must provide the function operator.
Comparison_result operator()(Point_3 p, Weighted_point_3 q, Weighted_point_3 r)
,
which compares the power distance between p
and q
to the power distance between p
and r
.
nearest_power_vertex
or nearest_power_vertex_in_cell
is issued. A constructor object that must provide the function operators.
Object_3 operator()(Point_3 p)
,
Object_3 operator()(Segment_3 s)
and
Object_3 operator()(Ray_3 r)
that construct an object respectively from a point, a segment and a ray.
A constructor object that must provide the function operator.
Line_3 operator()(Plane_3 pl, Point_3 p)
,
which constructs the line perpendicular to pl
passing through p
.
A constructor object that must provide the function operator.
Plane_3 operator()(Point_3 p, Point_3 q, Point_3 r)
,
which constructs the plane passing through p
, q
and r
.
p
, q
and r
are non collinear.A constructor object that must provide the function operator.
Ray_3 operator()(Point_3 p, Line_3 l)
,
which constructs the ray starting at p
with direction given by l
.
A constructor type.
The operator() constructs the bare point which is the center of the smallest orthogonal sphere to the input weighted points.
Bare_point operator() ( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 s);
A predicate object which must provide the following 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)
,
which performs the following:
Let \( {z(p,q,r,s)}^{(w)}\) be the power sphere of the weighted points \( (p,q,r,s)\). Returns
ON_ORIENTED_BOUNDARY
if t
is orthogonal to \( {z(p,q,r,s)}^{(w)}\),
ON_NEGATIVE_SIDE
if t
lies outside the oriented sphere of center \( z(p,q,r,s)\) and radius \( \sqrt{ w_{z(p,q,r,s)}^2 + w_t^2 }\) (which is equivalent to \( \Pi({t}^{(w)},{z(p,q,r,s)}^{(w)} >0\))),
ON_POSITIVE_SIDE
if t
lies inside this oriented sphere.
p, q, r, s
are not coplanar. Note that with this definition, if all the points have a weight equal to 0, then power_test_3(p,q,r,s,t)
= side_of_oriented_sphere(p,q,r,s,t)
.Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 r, Weighted_point_3 t)
,
which has an definition analogous to the previous method, for coplanar points, with the power circle \( {z(p,q,r)}^{(w)}\).
p, q, r
are not collinear and p, q, r, t
are coplanar. If all the points have a weight equal to 0, then power_test_3(p,q,r,t)
= side_of_oriented_circle(p,q,r,t)
.Oriented_side operator()( Weighted_point_3 p, Weighted_point_3 q, Weighted_point_3 t)
,
which is the same for collinear points, where \( {z(p,q)}^{(w)}\) is the power segment of p
and q
.
p
and q
have different Bare_points, and p, q, t
are collinear. If all points have a weight equal to 0, then power_test_3(p,q,t)
gives the same answer as the kernel predicate s(p,q).has_on(t)
would give, where s(p,q)
denotes the segment with endpoints p
and q
.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 (ON_POSITIVE_SIDE
when q
is heavier than p
).
p
and q
have equal Bare_points.