PVector[] points;
color bg = color(32,32,32);
void setup() {
size(500, 500);
colorMode(HSB, 360, 100, 100);
points = new PVector[140];
for (int i=0; i<points.length; i++) points[i] = new PVector(width/2, height/2);
}
void draw() {
background(bg);
noStroke();
float d = 150, angle = frameCount * TWO_PI / 165, ease = 0.5;
PVector leader = new PVector(width/2+cos(angle)*d, height/2+sin(angle*2)*d);
for (int i=0; i<points.length; i++) {
fill(180.0/points.length*i, 100, 100);
points[i].add(PVector.mult(PVector.sub(leader, points[i]), ease));
ellipse(points[i].x, points[i].y, 70, 70);
leader = points[i];
}
stroke(bg);
strokeWeight(2);
for(int row = 0; row < height; row+=5) line(0,row,width,row);
for(int col = 0; col < height; col+=5) line(col,0,col,height);
}