Triangles: solving a numerical issue

This commit is contained in:
Matthias Koefferlein 2023-08-20 16:48:58 +02:00
parent 1b60adf6c1
commit 83243f06be
2 changed files with 12 additions and 6 deletions

View File

@ -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);
}
}

View File

@ -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));
}