From 83243f06bebaf1a861d188b95fd485cecd914704 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 20 Aug 2023 16:48:58 +0200 Subject: [PATCH] Triangles: solving a numerical issue --- src/db/db/dbTriangles.cc | 8 +++++++- src/db/unit_tests/dbTrianglesTests.cc | 10 +++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/db/db/dbTriangles.cc b/src/db/db/dbTriangles.cc index b30a524f1..42e7ae0f7 100644 --- a/src/db/db/dbTriangles.cc +++ b/src/db/db/dbTriangles.cc @@ -470,7 +470,7 @@ Triangles::find_closest_edge (const db::DPoint &p, db::Vertex *vstart, bool insi double ds = (*e)->distance (p); - if (d < 0.0 || ds < d) { + if (d < 0.0) { d = ds; edge = *e; @@ -494,6 +494,12 @@ Triangles::find_closest_edge (const db::DPoint &p, db::Vertex *vstart, bool insi } } + } else if (ds < d) { + + d = ds; + edge = *e; + vnext = edge->other (v); + } } diff --git a/src/db/unit_tests/dbTrianglesTests.cc b/src/db/unit_tests/dbTrianglesTests.cc index a9d9e8a8c..45eee9612 100644 --- a/src/db/unit_tests/dbTrianglesTests.cc +++ b/src/db/unit_tests/dbTrianglesTests.cc @@ -875,8 +875,8 @@ TEST(triangulate_problematic) db::DPoint contour[] = { db::DPoint (129145.00000, -30060.80000), db::DPoint (129145.00000, -28769.50000), - db::DPoint (129159.50000, -28754.90000), - db::DPoint (129159.60000, -28754.80000), + db::DPoint (129159.50000, -28754.90000), // this is a very short edge <-- from here. + db::DPoint (129159.60000, -28754.80000), // <-- to here. db::DPoint (129159.50000, -28754.70000), db::DPoint (129366.32200, -28547.90000), db::DPoint (130958.54600, -26955.84600), @@ -890,7 +890,7 @@ TEST(triangulate_problematic) db::Triangles::TriangulateParameters param; param.min_b = 1.0; - param.max_area = 10000.0; + param.max_area = 100000.0; param.min_length = 0.002; TestableTriangles tri; @@ -906,7 +906,7 @@ TEST(triangulate_problematic) EXPECT_GE (t->b (), param.min_b); } - EXPECT_GT (tri.num_triangles (), size_t (1250)); - EXPECT_LT (tri.num_triangles (), size_t (1300)); + EXPECT_GT (tri.num_triangles (), size_t (470)); + EXPECT_LT (tri.num_triangles (), size_t (490)); }