def g18_recurse(rng):
"""Recursive subdivision; the deep leaves carry a dot."""
steps = rng.randint(5, 7)
N = rng.choice([25, 30])
c = Canvas(N, _pal(rng), steps, "recurse", "mixed")
f = Field(rng, "mesh", warp=rng.uniform(0.15, 0.35), steps=steps)
c.ground_from(f)
C = c.C
def emit(x, y, s, depth):
u, v = (x + s / 2) / 1000.0, (y + s / 2) / 1000.0
t = f.raw(u, v)
if depth < 2 and t > 0.48 + depth * 0.28 and c.room() > 40:
for dx in (0, s / 2):
for dy in (0, s / 2):
emit(x + dx, y + dy, s / 2, depth + 1)
elif depth:
k = f.idx(u, v)
c.sq(x, y, s, s, k)
c.dot(x + s / 2, y + s / 2, s * 0.3, (k + 3) % steps)
for j in range(N):
for i in range(N):
emit(i * C, j * C, C, 0)
return c