Quick one.
Exports to a googly GIF.
Log in to post a comment.
// LL 2021 const turtle = new Turtle(); const angle1 = 0.4; // min=0 max=1 step=0.01 const angle2 = 0.; // min=0 max=1 step=0.01 const offset = 0.5; // min=0 max=1.1 step=0.01 const iris = 0.25; /// min=0.01 max=1 step=0.01 function walk(i, t) { const angles = [angle1+t, angle1-angle2-t]; const list = [], circles = []; [0, 1].forEach(e => { const cx = 35 - e * 70, cy = 0, r = 40; const cx2 = cx + r * offset * Math.cos(angles[e] * Math.PI * 2) + r * iris ** 1.5 * Math.cos(-Math.PI * 2 / 3); const cy2 = cy + r * offset * Math.sin(angles[e] * Math.PI * 2) + r * iris ** 1.5 * Math.sin(-Math.PI * 2 / 3); const cx3 = cx + r * offset * Math.cos(angles[e] * Math.PI * 2); const cy3 = cy + r * offset * Math.sin(angles[e] * Math.PI * 2); list.push({x:cx2, y:cy2, r:r * iris ** 2.35}); list.push({x:cx2, y:cy2, r:r * iris ** 2.3}); for (var r2=0; r2<r*iris; r2+=0.1) list.push({x:cx3, y:cy3, r:r2}); for (var r2=r; r2<r*1.1 ; r2+=0.1) list.push({x:cx, y:cy, r:r2}); }); list.forEach(circle => { const steps = 200; const astep = Math.PI * 2 / steps; for (var j=0; j<steps; j++) { const a0 = j * astep, a1 = a0 + astep; const x0 = circle.x + circle.r * Math.cos(a0), y0 = circle.y + circle.r * Math.sin(a0); const x1 = circle.x + circle.r * Math.cos(a1), y1 = circle.y + circle.r * Math.sin(a1); var good = true; for (var k=0, c=circles.length; k<c && good; k++) { if (Math.max(Math.hypot(x0-circles[k].x, y0-circles[k].y), Math.hypot(x1-circles[k].x, y1-circles[k].y)) < circles[k].r) good = false; } if (good) { turtle.jump(x0, y0); turtle.goto(x1, y1); } } circles.push(circle); }); return false; }