1

我需要一个由以下代码定义的健壮谓词:

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。它返回Smallerif distance(p, q) < distance(p, r)Equalifdistance(p, q) == distance(p, r)Largerelse。第一个想法是通过向量移位c和,所以我们可以调用,但这会再次违反鲁棒性。那么,有没有人有适应它的想法?d(c - a)compare_distance_to_point(a, b, d + (c - a))

4

1 回答 1

2

如果您采用具有精确谓词(例如 Exact_predicates_inexact_constructions_kernel )的内核,则可以使用仿函数 Compare_distance_3 ,它是CompareDistance_3概念的模型。

Kernel::Compare_distance_3 cmp;

return cmp(a,b,c,d);

于 2012-04-11T06:16:48.077 回答