public class Node { private PVector current; private PVector next; private PVector diff; private int Kolor; public Node() { current = new PVector(250.f,250.f); next = new PVector(random(width), random(height)); diff = new PVector(0,0,0); float diffx = next.x - current.x; float diffy = next.y - current.y; diff.set(diffx,diffy,0); diff.normalize(); diff.mult(2); Kolor = color(int(random(255)),int(random(255)),int(random(255)),150); } public void display() { strokeWeight(2); stroke(Kolor); point(current.x,current.y); if(abs(current.x - next.x) > 5 || abs(current.y - next.y) > 5) { current.x += diff.x; current.y += diff.y; } else { next = new PVector(random(width), random(height)); float diffx = next.x - current.x; float diffy = next.y - current.y; diff.set(diffx,diffy,0); diff.normalize(); Kolor = color(int(random(255)),int(random(255)),int(random(255)),150); //diff.mult(5); ellipse(current.x,current.y,10,10); } } public void setCurrent() { current.x = random(width); current.y = random(height); next = new PVector(random(width), random(height)); float diffx = next.x - current.x; float diffy = next.y - current.y; diff.set(diffx,diffy,0); diff.normalize(); Kolor = color(int(random(255)),int(random(255)),int(random(255)),150); diff.mult(2); } public void setNext() { next.x = mouseX; next.y = mouseY; float diffx = next.x - current.x; float diffy = next.y - current.y; diff.set(diffx,diffy,0); diff.normalize(); diff.mult(2); } };

private ArrayList<Node> nodes; void setup() { size(500,500); background(255); smooth(); frameRate(150); nodes = new ArrayList<Node>(); for(int i = 0; i < 300; i++) { nodes.add(new Node()); } } void draw() { fill(255,255,255,10); rect(-5,-5,width+10,height+10); for(Node node : nodes) { node.display(); } if(mousePressed && mouseButton == RIGHT) { for(Node node : nodes) { node.setCurrent(); } } else if(mousePressed && mouseButton == LEFT) { for(Node node : nodes) { node.setNext(); } } }

Left click to make all the things move towards one spot, right click to send them all towards a random spot.