particle [] p = new particle [500]; void setup(){ for(int i = 0; i<500; i++){ p[i] = new particle(random(400),random(400),random(10)); } size (400,400); } void loop(){ if (!mousePressed){background (255);} for(int i = 0; i<500; i++){ p[i].cmove(); p[i].gmove2(); noStroke(); fill(i/10+130,i/10+110,i/10,i/10+100); ellipse(p[i].x-5,p[i].y-5,p[i].m+1,p[i].m+1); } } class particle{ float x,y,m,xv,yv; particle (float x, float y, float m){ this.x = x; this.y = y; this.m = m; xv = 0.0; yv = 0.0; } void cmove(){ float angle = atan2(y-mouseY,x-mouseX)+(PI/2); x += cos(angle)*(abs(xv)+abs(yv)); y += sin(angle)*(abs(xv)+abs(yv)); } void gmove2(){ float mouseMass = 5; float distX = mouseX - x; float distY = mouseY - y; float dist = sqrt(sq(distX) + sq(distY)); if (dist < 5){ dist = 5; } float grav = (m * mouseMass) / sq(dist) * 5; float xGrav = grav * (distX/dist); float yGrav = grav * (distY/dist); float xAccel = xGrav / m; float yAccel = yGrav / m; xv += xAccel; yv += yAccel; x +=xv; y +=yv; } }