Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- field = Polygon(get_rect([border, border], xsize-(2*border), ysize-(2*border)))
- polygons = [field]
- iterations = 10000
- pol_sizes = [field.area]
- for i in range(iterations):
- sym = np.random.normal(.5, .01)
- if i % 100 == 0:
- print("\rSubdividing - {:.2f}% ({:.4f})".format(100*i/iterations, sym), end="")
- l_idx = np.argsort(pol_sizes)[::-1][0]
- l_area = pol_sizes[l_idx]
- l_pol = polygons[l_idx]
- if l_area < .00001:
- continue
- del polygons[l_idx]
- del pol_sizes[l_idx]
- c_dst = None
- for _ in range(100):
- c1 = np.random.uniform()
- c2 = c1 + sym
- c2 %= 1
- p1 = LineString(l_pol.exterior.coords).interpolate(c1, True).coords[0]
- p2 = LineString(l_pol.exterior.coords).interpolate(c2, True).coords[0]
- c_dst_ = Point(p1).distance(Point(p2))
- if c_dst is None or c_dst_ < c_dst:
- pp1 = p1
- pp2 = p2
- ll = LineString([pp1, pp2])
- ll = affinity.scale(ll, 2, 2, 2)
- new_pols = split(l_pol, ll)
- for g in new_pols.geoms:
- p = Polygon(g)
- polygons.append(p)
- pol_sizes.append(p.area)
- for i, p in enumerate(polygons):
- lines.append(p.exterior.coords)
- return lines
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement