import itertools as IT
def scale_polygon(path,offset):
center = centroid_of_polygon(path)
for i in path:
if i[0] > center[0]:
i[0] += offset
else:
i[0] -= offset
if i[1] > center[1]:
i[1] += offset
else:
i[1] -= offset
return path
def area_of_polygon(x, y):
"""Calculates the signed area of an arbitrary polygon given its verticies
http://stackoverflow.com/a/4682656/190597 (Joe Kington)
http://softsurfer.com/Archive/algorithm_0101/algorithm_0101.htm#2D%20Polygons
"""
area = 0.0
for i in xrange(-1, len(x) - 1):
area += x[i] * (y[i + 1] - y[i - 1])
return area / 2.0
def centroid_of_polygon(points):
"""
http://stackoverflow.com/a/14115494/190597 (mgamba)
"""
area = area_of_polygon(*zip(*points))
result_x = 0
result_y = 0
N = len(points)
points = IT.cycle(points)
x1, y1 = next(points)
for i in range(N):
x0, y0 = x1, y1
x1, y1 = next(points)
cross = (x0 * y1) - (x1 * y0)
result_x += (x0 + x1) * cross
result_y += (y0 + y1) * cross
result_x /= (area * 6.0)
result_y /= (area * 6.0)
return (result_x, result_y)
Last active
April 21, 2022 11:24
-
-
Save hellpanderrr/2b2252e350a0e20c7271 to your computer and use it in GitHub Desktop.
python convex polygon scaling
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment