A probably pretty naive way of circle packing. Circles with a radius > hide_radius are not drawn.
#packing
Log in to post a comment.
// Circle packing. Created by Reinder Nijhoff 2018 // @reindernijhoff // // https://turtletoy.net/turtle/f9915c1d89 // Canvas.setpenopacity(1); const canvas_size = 95; const hide_radius = 5; // min=0, max=20, step=1 const max_radius = 10; // min=0.01, max=20, step=0.01 const min_radius = .3; // min=0.01, max=2, step=0.01 const shape = 1; // min=0, max=1, step=1 (Box, Circle) const radius_decr = .99; const max_tries = 5000; let radius = max_radius; const circles = []; const turtle = new Turtle(); function add_circle(t, r) { let coord_found = false; let tries = 0; while (!coord_found && tries < max_tries) { tries ++; const x = Math.random() * (canvas_size-r)*2 -canvas_size + r; const y = Math.random() * (canvas_size-r)*2 -canvas_size + r; const possible = circles.every(c => { const dx = c[0] - x; const dy = c[1] - y; const dr = c[2] + r; return dx**2 + dy**2 > dr**2 && (!shape || x**2 + y**2 < (canvas_size-r)**2); }); if (possible && (!shape || x*x+y*y < (canvas_size-r)*(canvas_size-r))) { coord_found = true; if (r < hide_radius) { draw_circle(x,y,t, r); } circles.push([x,y,r]); return true; } } return false; } function draw_circle(x,y,t, r) { turtle.jump(x,y-r); turtle.circle(r); } function walk(i) { if (!add_circle(turtle, radius)) { radius *= radius_decr; } return radius >= min_radius; }