我需要通過下面的代碼定義一個強大的斷言:強大距離比較謂詞
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 - a)
向量轉移c
和d
,所以我們可以稱之爲compare_distance_to_point(a, b, d + (c - a))
,但這將再次違反的魯棒性。那麼,有沒有人有適應它的想法?
檢查「魯棒自適應浮點幾何謂詞」的文章在http://www.cs.cmu.edu/~quake/robust.html – MBo 2012-04-11 03:27:13