source — color/gen_e.g10_rings
def g10_rings(rng):
"""Two concentric dots per cell — a bullseye that steps the ramp twice."""
steps = rng.randint(5, 7)
N = rng.choice([25, 30, 40])
c = Canvas(N, _pal(rng), steps, "rings", "dots")
f = Field(rng, rng.choice(["linear", "mesh"]), warp=rng.uniform(0.3, 0.6), steps=steps)
c.ground_from(f)
for j in range(N):
for i in range(N):
u, v = c.uv(i, j)
k = f.idx(u, v)
cx, cy = c.center(i, j)
c.dot(cx, cy, 0.46 * c.C, (k + 2) % steps)
c.dot(cx, cy, 0.22 * c.C, (k + 4) % steps)
return c