p5(s => {
s.setup = function(){
s.createCanvas(400,400);
s.noFill();
s.stroke(0);
let x1 = s.width/2, y1 = s.height/2, r1 = s.width/2;
let c1 = new Circle(x1, y1, -(1/r1));
s.circle(c1.center.x, c1.center.y, c1.r * 2);
let r2 = random(50,150), r3 = r1 - r2;
let a2 = random(Math.PI * 2), a3 = a2 + Math.PI;
let d2 = (r1 - r2), d3 = (r1 - r3);
let c2 = new Circle(x1 + s.cos(a2) * d2, y1 + s.sin(a2) * d2, 1/r2);
let c3 = new Circle(x1 + s.cos(a3) * d3, y1 + s.sin(a3) * d3, 1/r3);
s.circle(c2.center.x, c2.center.y, c2.r * 2);
s.circle(c3.center.x, c3.center.y, c3.r * 2);
let newCircles = descartes(c1, c2, c3);
s.stroke("red");
newCircles.forEach(c => s.circle(c.center.x, c.center.y, c.r * 2));
let c4A = newCircles[0], c4B = newCircles[1];
s.stroke("blue");
newCircles = descartes(c2,c3,c4A);
newCircles.forEach(c => s.circle(c.center.x, c.center.y, c.r * 2));
newCircles = descartes(c2,c3,c4B);
newCircles.forEach(c => s.circle(c.center.x, c.center.y, c.r * 2));
newCircles = descartes(c1,c3,c4A);
newCircles.forEach(c => s.circle(c.center.x, c.center.y, c.r * 2));
newCircles = descartes(c1,c3,c4B);
newCircles.forEach(c => s.circle(c.center.x, c.center.y, c.r * 2));
newCircles = descartes(c1,c2,c4A);
newCircles.forEach(c => s.circle(c.center.x, c.center.y, c.r * 2));
newCircles = descartes(c1,c2,c4B);
newCircles.forEach(c => s.circle(c.center.x, c.center.y, c.r * 2));
}
})