class Agent { color c; Edge e; float x, y, speed; int steps; Agent(Edge e) { this.e = e; this.x = e.n0.x; this.y = e.n0.y; speed = .5 + random(.5); // in pixels speed = speed/e.len(); // in fraction of length steps = 0; c = randomBrightColor(); } void step(){ steps += 1; float delta = steps*speed; if(abs(delta) >= 1.0) { Node toNode = (speed > 0)?e.n1:e.n0; e = (Edge)randomOtherOneOf(toNode.edges, e); steps = 0; delta = 0; speed = (toNode==e.n0)?abs(speed):-abs(speed); } Node p = (speed > 0)?e.n0:e.n1; x = p.x + e.dx()*delta; y = p.y + e.dy()*delta; paint(); } void paint(){ noStroke(); fill(c); rect(x-2,y-2,5,5); } }