比较谓词的鲁棒距离

时间:2012-04-10 18:52:47

标签: computational-geometry cgal

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

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。第一个想法是将cd移到(c - a)向量,因此我们可以调用compare_distance_to_point(a, b, d + (c - a)),但这会再次违反稳健性。那么,有没有人有想法适应它?

1 个答案:

答案 0 :(得分:2)

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

Kernel::Compare_distance_3 cmp;

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