From 7564bd19809c36fef4841f083177862788504af8 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Tue, 5 Feb 2019 12:30:54 +0200 Subject: [PATCH] fix a race condition with coincident chain of holes Closes #111. --- src/earcut.js | 2 +- test/fixtures/issue111.json | 6 ++++++ test/test.js | 5 +++-- 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/issue111.json diff --git a/src/earcut.js b/src/earcut.js index 7691e13..7a09994 100644 --- a/src/earcut.js +++ b/src/earcut.js @@ -449,7 +449,7 @@ function getLeftmost(start) { var p = start, leftmost = start; do { - if (p.x < leftmost.x) leftmost = p; + if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p; p = p.next; } while (p !== start); diff --git a/test/fixtures/issue111.json b/test/fixtures/issue111.json new file mode 100644 index 0000000..e5667b1 --- /dev/null +++ b/test/fixtures/issue111.json @@ -0,0 +1,6 @@ +[ +[[800,4520],[800,4700],[796,4702],[800,4692],[734,4644],[734,4628],[730,4632],[726,4630],[718,4640],[690,4623],[722,4598],[690,4608],[690,4520],[800,4520]], +[[718,4640],[716,4630],[710,4628],[718,4640]], +[[734,4610],[734,4628],[740,4622],[734,4610]], +[[734,4610],[745,4600],[734,4602],[734,4610]] +] diff --git a/test/test.js b/test/test.js index 68b70d9..98fadd6 100644 --- a/test/test.js +++ b/test/test.js @@ -12,8 +12,8 @@ areaTest('water2', 1212); areaTest('water3', 197); areaTest('water3b', 25); areaTest('water4', 705); -areaTest('water-huge', 5174, 0.0011); -areaTest('water-huge2', 4461, 0.0028); +areaTest('water-huge', 5175, 0.0011); +areaTest('water-huge2', 4462, 0.0028); areaTest('degenerate', 0); areaTest('bad-hole', 42, 0.019); areaTest('empty-square', 0); @@ -37,6 +37,7 @@ areaTest('shared-points', 4); areaTest('bad-diagonals', 7); areaTest('issue83', 0); areaTest('issue107', 0); +areaTest('issue111', 0); test('indices-2d', function (t) { var indices = earcut([10, 0, 0, 50, 60, 60, 70, 10]);