次のコードで定義された堅牢な述語が必要です。
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)
述語です。Smaller
if distance(p, q) < distance(p, r)
、Equal
if distance(p, q) == distance(p, r)
、それ以外の場合は戻りますLarger
。最初の考えは、シフトc
しd
て(c - a)
ベクトルで行うことです。そのため、を呼び出すことができますcompare_distance_to_point(a, b, d + (c - a))
が、これは再び堅牢性に違反します。それで、誰かがそれを適応させるためのアイデアを持っていますか?