float G = 6.7 * pow(10, -11); particle [] p = new particle [10000]; void setup(){ for(int i = 0; i<10000; i++){ p[i] = new particle(random(400),random(400),1000000); } size (400,400); stroke(255); } void loop(){ if (!mousePressed){background (0);} for(int i = 0; i<10000; i++){ p[i].gmove(); p[i].cmove(); stroke(i/100+120,i/100+100,i/100,i/100+100); point(p[i].x,p[i].y); } point (0,0); } class particle{ float x,y,m,gv,cv; particle (float x, float y, float m){ this.x = x; this.y = y; this.m = m; gv = 1.0; cv = 1.0; } void cmove(){ float angle = atan2(y-mouseY,x-mouseX)+(PI/2); cv += gv / sq(rad(x,y)); x += cos(angle)*(cv); y += sin(angle)*(cv); } void gmove(){ float ga = atan2(y-mouseY,x-mouseX); float gva = (G * m) / sq(rad(x,y)); gv += gva; x -= cos(ga)*gv; y -= sin(ga)*gv; if (x == mouseX && y == mouseY){ x = random(400); y = random(400); } } } float rad (float x, float y){ return sqrt(sq(x-mouseX)+sq(y-mouseY)); }