Skip to content

Instantly share code, notes, and snippets.

@rbeucher
Created June 15, 2018 21:53
Show Gist options
  • Save rbeucher/d308a51114e7219c6bc048afc124da2c to your computer and use it in GitHub Desktop.
Save rbeucher/d308a51114e7219c6bc048afc124da2c to your computer and use it in GitHub Desktop.
def inside_polygon(x, y, points):
"""
Return True if a coordinate (x, y) is inside a polygon defined by
a list of verticies [(x1, y1), (x2, x2), ... , (xN, yN)].
Reference: http://www.ariel.com.au/a/python-point-int-poly.html
"""
n = len(points)
inside = False
p1x, p1y = points[0]
for i in range(1, n + 1):
p2x, p2y = points[i % n]
if y > min(p1y, p2y):
if y <= max(p1y, p2y):
if x <= max(p1x, p2x):
if p1y != p2y:
xinters = (y - p1y) * (p2x - p1x) / (p2y - p1y) + p1x
if p1x == p2x or x <= xinters:
inside = not inside
p1x, p1y = p2x, p2y
return inside
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment