我需要一个由以下代码定义的健壮谓词:
CompareResult compareDistance(Point a, Point b, Point c, Point d) {
if (distance(a, b) > distance(c, d))
return Larger;
else if (distance(a, b) == distance(c, d))
return Equal;
else
return Smaller;
}
由于浮点算术的限制,我们不能distance
精确计算(甚至是平方),所以如果我们直接实现这个代码,谓词就不会很健壮。我试图在 CGAL 库中找到它,但找不到。
有点接近我需要的compare_distance_to_point(Point p, Point q, Point r)
谓词 predicate。它返回Smaller
if distance(p, q) < distance(p, r)
、Equal
ifdistance(p, q) == distance(p, r)
和Larger
else。第一个想法是通过向量移位c
和,所以我们可以调用,但这会再次违反鲁棒性。那么,有没有人有适应它的想法?d
(c - a)
compare_distance_to_point(a, b, d + (c - a))