我需要一个由以下代码定义的健壮谓词:
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
,则返回distance(p, q) < distance(p, r)
,如果Equal
则返回distance(p, q) == distance(p, r)
,否则返回Larger
。第一个想法是将c
和d
移到(c - a)
向量,因此我们可以调用compare_distance_to_point(a, b, d + (c - a))
,但这会再次违反稳健性。那么,有没有人有想法适应它?
答案 0 :(得分:2)
如果您使用具有精确谓词的内核,例如 Exact_predicates_inexact_constructions_kernel, 您可以使用仿函数Compare_distance_3,它是概念CompareDistance_3的模型。
Kernel::Compare_distance_3 cmp;
return cmp(a,b,c,d);