From 0f891b95674b4bc870ed0971600b70eef667383f Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Mon, 15 Apr 2024 16:40:54 +0200 Subject: [PATCH] fix point_in_polygon method when the asum was a multiple of 2*phi (#4495) Co-authored-by: maxcapodi78 Co-authored-by: adimaria --- pyaedt/modeler/geometry_operators.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyaedt/modeler/geometry_operators.py b/pyaedt/modeler/geometry_operators.py index 2086c0f58b1..d55705d34c7 100644 --- a/pyaedt/modeler/geometry_operators.py +++ b/pyaedt/modeler/geometry_operators.py @@ -1558,6 +1558,8 @@ def point_in_polygon(point, polygon, tolerance=1e-8): The method implements the radial algorithm (https://es.wikipedia.org/wiki/Algoritmo_radial) + This version supports also self-intersecting polygons. + point : List List of ``[x, y]`` coordinates. polygon : List @@ -1591,9 +1593,10 @@ def point_in_polygon(point, polygon, tolerance=1e-8): if abs(abs(a) - math.pi) < tol: return 0 asum += a + r = asum % (2*math.pi) if abs(asum) < tol: return -1 - elif abs(abs(asum) - 2*math.pi) < tol: + elif r < tol or (2*math.pi - r) < tol: return 1 else: # pragma: no cover raise Exception("Unexpected error!")