diff --git a/src/earcut.js b/src/earcut.js index b4d1359..2cfd60d 100644 --- a/src/earcut.js +++ b/src/earcut.js @@ -483,8 +483,11 @@ function equals(p1, p2) { function intersects(p1, q1, p2, q2) { if ((equals(p1, p2) && equals(q1, q2)) || (equals(p1, q2) && equals(p2, q1))) return true; - return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 && - area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0; + var a0 = area(p1, q1, p2); + var a1 = area(p1, q1, q2); + var a2 = area(p2, q2, p1); + var a3 = area(p2, q2, q1); + return (a0 === 0 && a1 === 0) || (a0 > 0 !== a1 > 0 && a2 > 0 !== a3 > 0); } // check if a polygon diagonal intersects any polygon segments diff --git a/test/expected.json b/test/expected.json index ac018ec..7a07940 100644 --- a/test/expected.json +++ b/test/expected.json @@ -33,7 +33,8 @@ "issue83": 0, "issue107": 0, "issue111": 19, - "boxy": 56 + "boxy": 57, + "collinear-diagonal": 14 }, "errors": { "dude": 2e-15, diff --git a/test/fixtures/collinear-diagonal.json b/test/fixtures/collinear-diagonal.json new file mode 100644 index 0000000..87c9423 --- /dev/null +++ b/test/fixtures/collinear-diagonal.json @@ -0,0 +1 @@ +[[[3468,1913],[3486,1884],[3413,1869],[3322,1869],[3413,1854],[3413,1869],[3486,1869],[3486,1884],[3504,1884],[3504,1869],[3432,1869],[3432,1854],[3395,1854],[3432,1839],[3432,1854],[3450,1839],[3341,1839],[3341,1825],[3195,1825],[3341,1810],[3341,1825],[3450,1825],[3523,1854],[3523,1913]]]