![]() |
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. It must provide definitions for the power tests.
We use here the same notation as in
Section .
To simplify notation, p will often denote in the sequel either the
point p
3 or the weighted point p(w)=(p,wp).
| |
The weighted point type.
| |
| |
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( wz(p,q,r,s)2 + wt2 ) (which is equivalent to ![]() ON_POSITIVE_SIDE if t lies inside this oriented sphere. Precondition: 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(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). Precondition: 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(p,q,r,s,t) = side_of_oriented_circle(p,q,r,s,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. Precondition: 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(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). Precondition: p and q have equal Bare_points.
|
The following predicate is required if a call to nearest_power_vertex or nearest_power_vertex_in_cell is issued:
| |
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.
|
The following function gives access to the predicate object:
|
|
CGAL::Regular_triangulation_euclidean_traits_3
CGAL::Regular_triangulation_filtered_traits_3.