import java.util.*; ArrayList stars; void setup() { stars = new ArrayList(); size(600 ,600); stroke(255); fill(20); smooth(); frameRate(10); } void draw() { background(20); for(int i = 0; i < stars.size(); i++) { Star s = (Star)stars.get(i); s.draw(); } } void mouseDragged() { stars.add(new Star(mouseX, mouseY)); } void mousePressed() { stars.add(new Star(mouseX, mouseY)); } // floating point point class FPoint { float x; float y; FPoint(float x, float y) { this.x = x; this.y = y; } } class Star { FPoint p; FPoint d; ArrayList strands; Star(int x, int y) { p = new FPoint(x, y); // d is delta x and delta y - velocity vector d = new FPoint(0,0); strands = new ArrayList(); int s = int(random(2, 7)); for(int i = 0; i < s; i++) { strands.add(new Strand(this, int(random(-20,20)), int(random(-20, 20)))); } } void draw() { d.x += random(-1,1); d.y += random(-1,1); if(p.x < 0 || p.x > width) d.x *= -1; if(p.y < 0 || p.y > height) d.y *= -1; if(abs(d.x)>7) d.x /= 2; if(abs(d.y)>7) d.y /= 2; p.x += d.x; p.y += d.y; for(int i = 0; i < strands.size(); i++) { Strand s = (Strand) strands.get(i); s.draw(); } } class Strand { FPoint p; FPoint d; Star s; Strand(Star s, int x, int y) { this.s = s; p = new FPoint(x, y); d = new FPoint(0, 0); } void draw() { stroke(255); d.x += random(-1,1); d.y += random(-1,1); if(abs(p.x)>40) d.x *= -1; if(abs(p.y)>40) d.y *= -1; if(abs(d.x)>7) d.x /= 2; if(abs(d.y)>7) d.y /= 2; p.x += d.x; p.y += d.y; line(s.p.x, s.p.y, s.p.x + p.x, s.p.y + p.y); stroke(255,0,0); float diameter = 4; // if(mouseX>width/2) diameter = abs(p.x); ellipse(s.p.x + p.x, s.p.y + p.y,diameter,diameter); } } } void keyPressed() { switch(key) { case 'c': stars.clear(); break; } }