mirror of https://github.com/CGAL/cgal
In these two algorithms, points farthest from a line must be found. In case of multiple points at the same distance, an "extremity" of this set of points must be returned. This was properly documented in the Less_signed_distance_to_line_2 functor of the ConvexHullTraits_2 concept: [ ... ] The predicate must provide a total order compatible with convexity, <I>i.e.</I>, for any line segment \f$ s\f$ one of the endpoints of \f$ s\f$ is the smallest point among the points on \f$ s\f$, with respect to the order given by `Less_signed_distance_to_line_2`. [ ... ] And specific models did respect this requirement. However, the kernel is supposed to also be a model of ConvexHullTraits_2, but Kernel_23::LessSignedDistanceToLine_2 does not require this, and the models (EPICK, Simple_Cartesian, etc.) do not implement it. Hence, if a kernel was used as geometric traits for 2D Convex Hull algorithms, one might not get the expected extreme point when there are multiple points at the same distance to a line at some point in the algorithm. The algorithm recovered, but this created extra points on the hull. Fixing the functor in the kernel would create an inconsistency with Kernel_23::Compare_signed_distance_to_line_2, so instead this commit changes the concept and the code to require providing Compare_signed_distance_to_line_2 and then uses Less_xy in the code in case of EQUAL return (that is actually how it was done in the Convex_hull_2-specific versions of the ConvexHullTraits_2 model). |
||
|---|---|---|
| .. | ||
| ConvexHullTraits_2.h | ||