float numPart = 2000;
float r = 40.0;
float[] th = {0.0f, 0.5f, 1.0f, 1.5f, 2.0f, 2.5f, 3.0f, 3.5f, 4.0f, 4.5f, 5.0f, 5.5f, 6.0f, 6.5f};
float[] xx = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
float[] yy = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
float x, y;
float inx, iny;
PVector centerLoc;
ArrayList particles1 = new ArrayList();
ArrayList particles2 = new ArrayList();
ArrayList particles3 = new ArrayList();
ArrayList particles4 = new ArrayList();
ArrayList particles5 = new ArrayList();
ArrayList particles6 = new ArrayList();
ArrayList particles7 = new ArrayList();
ArrayList particles8 = new ArrayList();
ArrayList particles9 = new ArrayList();
ArrayList particles10 = new ArrayList();
ArrayList particles11 = new ArrayList();
ArrayList particles12 = new ArrayList();
ArrayList particles13 = new ArrayList();
void setup()
{
size(640, 480, P2D);
colorMode(HSB, 360, 100, 100, 100);
smooth();
inx = width/2;
iny = height/2;
for(int i=0; i<numPart; i++){
x = r * cos(th[0]);
y = r * sin(th[0]);
x += inx;
y += iny;
particles1.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,70.0f)));
particles2.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,50.0f)));
particles3.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,70.0f)));
particles4.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,50.0f)));
particles5.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,70.0f)));
particles6.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,50.0f)));
particles7.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,70.0f)));
particles8.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,50.0f)));
particles9.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,70.0f)));
particles10.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,50.0f)));
particles11.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,70.0f)));
particles12.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,50.0f)));
particles13.add(new Particle(new PVector(), new PVector(), new PVector(x, y, 0), random(10.0f,70.0f)));
th[0] += 0.1;
}
centerLoc = new PVector(width/2, height/2, 0);
}
void draw()
{
background(1, 100, 0, 100);
for(int z=0; z<13; z++)
{
xx[z] = r * cos(th[z+1]);
yy[z] = r * sin(th[z+1]);
xx[z] += inx;
yy[z] += iny;
xx[z] += random(-20.0, 20.0);
yy[z] += random(-20.0, 20.0);
th[z+1] += 0.001f;
}
for (int i = particles1.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles1.get(i);
prt.run();
prt.move(new PVector(xx[0],yy[0],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(1.2f);
prt.add_force(diff);
}
for (int i = particles2.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles2.get(i);
prt.run();
prt.move(new PVector(xx[1],yy[1],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(0.6f);
prt.add_force(diff);
}
for (int i = particles3.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles3.get(i);
prt.run();
prt.move(new PVector(xx[2],yy[2],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(1.2f);
prt.add_force(diff);
}
for (int i = particles4.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles4.get(i);
prt.run();
prt.move(new PVector(xx[3],yy[3],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(0.6f);
prt.add_force(diff);
}
for (int i = particles5.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles5.get(i);
prt.run();
prt.move(new PVector(xx[4],yy[4],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(1.2f);
prt.add_force(diff);
}
for (int i = particles6.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles6.get(i);
prt.run();
prt.move(new PVector(xx[5],yy[5],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(0.6f);
prt.add_force(diff);
}
for (int i = particles7.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles7.get(i);
prt.run();
prt.move(new PVector(xx[6],yy[6],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(1.2f);
prt.add_force(diff);
}
for (int i = particles8.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles8.get(i);
prt.run();
prt.move(new PVector(xx[7],yy[7],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(0.6f);
prt.add_force(diff);
}
for (int i = particles9.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles9.get(i);
prt.run();
prt.move(new PVector(xx[8],yy[8],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(1.2f);
prt.add_force(diff);
}
for (int i = particles10.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles10.get(i);
prt.run();
prt.move(new PVector(xx[9],yy[9],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(0.6f);
prt.add_force(diff);
}
for (int i = particles11.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles11.get(i);
prt.run();
prt.move(new PVector(xx[10],yy[10],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(1.2f);
prt.add_force(diff);
}
for (int i = particles12.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles12.get(i);
prt.run();
prt.move(new PVector(xx[11],yy[11],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(0.6f);
prt.add_force(diff);
}
for (int i = particles13.size()-1; i >= 0; i--) {
Particle prt = (Particle) particles13.get(i);
prt.run();
prt.move(new PVector(xx[12],yy[12],0));
PVector diff = PVector.sub(centerLoc,prt.getLocation());
diff.normalize();
diff.mult(1.2f);
prt.add_force(diff);
}
fill(0, 0, 0);
noStroke();
ellipse(width/2, height/2, 65, 65);
}