import controlP5.*; ControlP5 ctrl; public int num_circles = 25; // initial value int n_circles; // current value int size_x = 500; int size_y = 500; public float r_min = 5; public float r_max = 50; public float additional_distance = 10.0; color bg = color(10, 10, 50); float last_overlap = 0.0; Circle circles[]; void setup() { size(size_x, size_y); background(bg); initialize(); ctrl = new ControlP5(this); ctrl.addButton("restart", 1).linebreak(); ctrl.addSlider("num_circles", 0, 100).linebreak(); ctrl.addSlider("r_min", 0, 100).linebreak(); ctrl.addSlider("r_max", 0, 100).linebreak(); ctrl.addSlider("additional_distance", 0, 100); ctrl.hide(); } void draw() { if (last_overlap == 0.0) background(10, 50, 10); else { background(bg); for (int i = 0; i < 30; i++) if (evo_step()) break; } noStroke(); for(int i = 0; i < n_circles; i++) { circles[i].drawC(); } } public void restart() { initialize(); } void initialize() { int i; float r, x, y, c; n_circles = num_circles; circles = new Circle[n_circles]; for(i = 0; i < n_circles; i++) { r = r_min + random(r_max-r_min); x = r + random((width-2*r)); y = r + random((height-2*r)); c = random(100, 255); circles[i] = new Circle(x, y, r, color(c, 100)); } last_overlap = overlap(); }