Exploring limits.
Log in to post a comment.
// You can find the Turtle API reference here: https://turtletoy.net/syntax Canvas.setpenopacity(1); const maxCircleSize = 20; //min = 5, max = 80, step = 1 const height = 90; //min = 10, max = 100, step = 1 const width = 45; //min = 10, max = 100, step = 1 let depth = 10; //min = 1, max = 10, step = 0.5 depth = 2**(depth * 1.5); const traceAll = 1; ////min = 0, max = 1, step = 1, (no, yes) // Global code will be evaluated once. const turtle = new Turtle(); let circles = []; let cancelled = 0; class Circle{ constructor(x, y, r, trace = 1){ this.x = x; this.y = y; this.r = r; for(let circle of circles){ let deltaX = x - circle.x; let deltaY = y - circle.y; let delta = Math.sqrt(deltaX**2 + deltaY**2); // first test if this new circle will be in one already existing. if(delta < circle.r){ /* console.log("circle inside"); while(this.r > 0.1){ turtle.jump(this.x+this.r, this.y); turtle.seth(90); turtle.circle(this.r); this.r -= 0.1; } */ cancelled++; return; } // then test if the circles are overlaping if(delta < (circle.r + this.r)){ this.r = delta - circle.r; if(this.r < 0.5){ cancelled++; return; } } } if(trace){ turtle.jump(this.x+this.r, this.y); turtle.seth(90); turtle.circle(this.r); } cancelled = 0; circles.push(this); } } // The walk function will be called until it returns false. function walk(i) { let r = Math.random() * maxCircleSize; if(r < 0.3) r = 0.5; let trace = 1; if(!traceAll && r > (maxCircleSize / 3)) trace = 0; let x = Math.random() * 2 * (width - r) - width + r; let y = Math.random() * 2 * (height - r) - height + r; new Circle(x, y, r, trace); if(cancelled > depth){ // console.log("run ", i, circles.length, " bubbles !"); return false; } return true; }