/* Structure 3 (work in progress) A surface filled with one hundred medium to small sized circles. Each circle has a different size and direction, but moves at the same slow rate. Display: A. The instantaneous intersections of the circles B. The aggregate intersections of the circles Implemented by Casey Reas <http://groupc.net> Uses circle intersection code from William Ngan <http://metaphorical.net> Processing v.68 <http://processing.org> */ int numCircle = 100; Circle[] circles = new Circle[numCircle]; void setup() { size(640, 480); framerate(30); for(int i=0; i<numCircle; i++) { circles[i] = new Circle(random(width), random(height), random(2, 6)*10, random(-2.0, 2.0), random(-2.0, 2.0)); } ellipseMode(CENTER_DIAMETER); background(255); } void loop() { background(255); for(int i=0; i<numCircle; i++) { circles[i].move(); } } class Circle { float x, y, r, sp, ysp; Circle( float px, float py, float pr, float psp, float pysp) { x = px; y = py; r = pr; sp = psp; ysp = pysp; } void move() { x += sp; y += ysp; if(sp > 0) { if(x > width+r) { x = -r; } } else { if(x < -r) { x = width+r; } } if(ysp > 0) { if(y > height+r) { y = -r; } } else { if(y < -r) { y = height+r; } } stroke(0); noFill(); ellipse(x, y, r, r); } }