Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.43 KB | None | 0 0
  1. field = Polygon(get_rect([border, border], xsize-(2*border), ysize-(2*border)))
  2.  
  3.     polygons = [field]
  4.     iterations = 10000
  5.     pol_sizes = [field.area]
  6.  
  7.     for i in range(iterations):
  8.  
  9.         sym = np.random.normal(.5, .01)
  10.  
  11.  
  12.         if i % 100 == 0:
  13.             print("\rSubdividing - {:.2f}% ({:.4f})".format(100*i/iterations, sym), end="")
  14.  
  15.         l_idx = np.argsort(pol_sizes)[::-1][0]
  16.         l_area = pol_sizes[l_idx]
  17.         l_pol = polygons[l_idx]
  18.  
  19.         if l_area < .00001:
  20.             continue
  21.  
  22.         del polygons[l_idx]
  23.         del pol_sizes[l_idx]
  24.        
  25.         c_dst = None
  26.         for _ in range(100):
  27.             c1 = np.random.uniform()
  28.             c2 = c1 + sym
  29.             c2 %= 1
  30.            
  31.             p1 = LineString(l_pol.exterior.coords).interpolate(c1, True).coords[0]
  32.             p2 = LineString(l_pol.exterior.coords).interpolate(c2, True).coords[0]
  33.  
  34.             c_dst_ = Point(p1).distance(Point(p2))
  35.  
  36.             if c_dst is None or c_dst_ < c_dst:
  37.                 pp1 = p1
  38.                 pp2 = p2
  39.        
  40.         ll = LineString([pp1, pp2])
  41.         ll = affinity.scale(ll, 2, 2, 2)
  42.         new_pols = split(l_pol, ll)
  43.        
  44.         for g in new_pols.geoms:
  45.             p = Polygon(g)
  46.             polygons.append(p)
  47.             pol_sizes.append(p.area)
  48.            
  49.     for i, p in enumerate(polygons):
  50.        lines.append(p.exterior.coords)
  51.  
  52.     return lines
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement