From bde26eca15ffb340d622abd9c399cc59c86201d5 Mon Sep 17 00:00:00 2001 From: MartyMaro Date: Thu, 8 Feb 2018 21:45:08 +0100 Subject: [PATCH] Prevents trying to create sub-polygons (triangles) with less than 3 non-collinear points when triangulating a polygon fixes #55 --- polygon.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/polygon.lua b/polygon.lua index 857eda7..aa93e00 100644 --- a/polygon.lua +++ b/polygon.lua @@ -320,10 +320,12 @@ function Polygon:triangulate() next, prev = next_idx[current], prev_idx[current] local p,q,r = vertices[prev], vertices[current], vertices[next] if isEar(p,q,r, concave) then - triangles[#triangles+1] = newPolygon(p.x,p.y, q.x,q.y, r.x,r.y) - next_idx[prev], prev_idx[next] = next, prev - concave[q] = nil - n_vert, skipped = n_vert - 1, 0 + if not areCollinear(p, q, r) then + triangles[#triangles+1] = newPolygon(p.x,p.y, q.x,q.y, r.x,r.y) + next_idx[prev], prev_idx[next] = next, prev + concave[q] = nil + n_vert, skipped = n_vert - 1, 0 + end else skipped = skipped + 1 assert(skipped <= n_vert, "Cannot triangulate polygon")