2012-04-10 82 views
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。它返回Smaller如果distance(p, q) < distance(p, r)Equal如果distance(p, q) == distance(p, r)Larger否則。首先想到的是通過(c - a)向量轉移cd,所以我們可以稱之爲compare_distance_to_point(a, b, d + (c - a)),但這將再次違反的魯棒性。那麼,有沒有人有適應它的想法?

+0

檢查「魯棒自適應浮點幾何謂詞」的文章在http://www.cs.cmu.edu/~quake/robust.html – MBo 2012-04-11 03:27:13

回答