summaryrefslogtreecommitdiff
path: root/core/math/triangulate.cpp
diff options
context:
space:
mode:
authorNicolas Silva <nical@fastmail.com>2018-02-05 16:01:24 +0100
committerNicolas Silva <nical@fastmail.com>2018-02-05 16:01:24 +0100
commit91215e191992f3cbbbf4fe047b000ac5a403085c (patch)
tree45faa53584125884cd7747d6f03aff4c0f6df3c3 /core/math/triangulate.cpp
parente836a7d88d29347c509ef80a9e5cd63c682d5ad4 (diff)
Fix polygon triangulation failure.
The ear clipping algorithm used to triangulate polygons has a slightly too conservative point-in-triangle test which can, in some configurations prevent it from finding a possible tessellation. Relaxing the test by considering that points exactly on edges don't belong the triangle fixes the issue. Changing the semantic of the test is safe because no other code makes use of it. A more detailed explanation can be found in issue #16395. Fixes #16395.
Diffstat (limited to 'core/math/triangulate.cpp')
-rw-r--r--core/math/triangulate.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/core/math/triangulate.cpp b/core/math/triangulate.cpp
index 957e16f92c..5bae74ac7e 100644
--- a/core/math/triangulate.cpp
+++ b/core/math/triangulate.cpp
@@ -74,7 +74,7 @@ bool Triangulate::is_inside_triangle(real_t Ax, real_t Ay,
cCROSSap = cx * apy - cy * apx;
bCROSScp = bx * cpy - by * cpx;
- return ((aCROSSbp >= 0.0) && (bCROSScp >= 0.0) && (cCROSSap >= 0.0));
+ return ((aCROSSbp > 0.0) && (bCROSScp > 0.0) && (cCROSSap > 0.0));
};
bool Triangulate::snip(const Vector<Vector2> &p_contour, int u, int v, int w, int n, const Vector<int> &V) {