diff --git a/geo/Geo.tpp b/geo/Geo.tpp index 529e59c..e03a496 100644 --- a/geo/Geo.tpp +++ b/geo/Geo.tpp @@ -1362,11 +1362,12 @@ double withinDist(const Point& p, const XSortedLine& line, double maxDist, double euclideanDistUpperBound = std::min(maxEuclideanDist, std::min(dist(p, line.rawLine().back().other), dist(p, line.rawLine().front().p))); - double minDist = std::min( - std::min(maxDist, distFunc(p, line.rawLine().back().other, maxDist)), - distFunc(p, line.rawLine().front().p, maxDist)); + double minDist = std::min(distFunc(p, line.rawLine().back().other, + std::numeric_limits::max()), + distFunc(p, line.rawLine().front().p, + std::numeric_limits::max())); - auto padding = paddingFunc(euclideanDistUpperBound, minDist, + auto padding = paddingFunc(euclideanDistUpperBound, std::min(maxDist, minDist), getBoundingBox(p), line.boundingBox()); // skip irrelevant parts @@ -1400,8 +1401,8 @@ double withinDist(const Point& p, const XSortedLine& line, double maxDist, if (euclideanDist < euclideanDistUpperBound) { euclideanDistUpperBound = euclideanDist; - padding = paddingFunc(euclideanDistUpperBound, minDist, getBoundingBox(p), - line.boundingBox()); + padding = paddingFunc(euclideanDistUpperBound, std::min(maxDist, minDist), + getBoundingBox(p), line.boundingBox()); } } diff --git a/tests/GeoTestDist.cpp b/tests/GeoTestDist.cpp index f14b021..03b19d3 100644 --- a/tests/GeoTestDist.cpp +++ b/tests/GeoTestDist.cpp @@ -150,9 +150,17 @@ static void testDistWithinRealisticMaxDist() { approx(5.5)); TEST(util::geo::withinDist(XSortedLine(line), point, 10.0), ==, approx(5.5)); + TEST(util::geo::withinDist(XSortedLine(line), point, 5.4), >, + 5.4); + TEST(util::geo::withinDist(XSortedLine(line), point, 5.0), >, + 5.0); + TEST(util::geo::withinDist(XSortedLine(line), point, 1.0), >, + 1.0); TEST(util::geo::withinDist(XSortedPolygon(poly), point2, 10.0), ==, approx(sqrt(2))); + TEST(util::geo::withinDist(XSortedPolygon(poly), point2, 1.0), >, + 1); TEST(util::geo::withinDist(point2, XSortedPolygon(poly), 10.0), ==, approx(sqrt(2))); @@ -172,6 +180,12 @@ static void testDistWithinRealisticMaxDist() { TEST(util::geo::withinDist(XSortedPolygon(polyWithInner), point, 10.0), ==, approx(0.5)); + TEST(util::geo::withinDist(XSortedPolygon(polyWithInner), + XSortedLine(line2), .2), + >, 0.2); + TEST(util::geo::withinDist(XSortedPolygon(polyWithInner), + point, .4), + >, 0.4); TEST(util::geo::withinDist(XSortedPolygon(poly2), XSortedPolygon(polyWithInner), 10.0), @@ -179,6 +193,9 @@ static void testDistWithinRealisticMaxDist() { TEST(util::geo::withinDist(XSortedPolygon(polyWithInner), XSortedPolygon(poly2), 10.0), ==, approx(0.25)); + TEST(util::geo::withinDist(XSortedPolygon(polyWithInner), + XSortedPolygon(poly2), .2), + >, 0.2); } // _____________________________________________________________________________