cgal/Convex_hull_2/doc/Convex_hull_2/Concepts
Mael Rouxel-Labbé 13b4060644 Fix eddy/bykat returning collinear vertices on the hull
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).
2022-07-01 13:35:59 +02:00
..
ConvexHullTraits_2.h Fix eddy/bykat returning collinear vertices on the hull 2022-07-01 13:35:59 +02:00