/*
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);
}
}