// TrackerLeader01 // David Bollinger, January 2006 // http://www.davebollinger.com // for Processing 0015 Beta // // Leader base class development // a Tracker5 follows the base Leader class (instead of mouse) // tracker5 is a tracker4 that fills rect with transparent white // (helps erase display allowing for longer runs without clutter) class Tracker5 extends Tracker { Tracker5(int _x, int _y) { super(_x, _y); } void draw() { stroke(clr); fill(color(255,255,255,32)); rectMode(CENTER); float theta = tracker.getAngle(); float dx = tracker.x - tracker.lastx; float dy = tracker.y - tracker.lasty; float rad = dx*dx + dy*dy; //float rad = dist(tracker.lastx, tracker.lasty, tracker.x, tracker.y); pushMatrix(); translate(tracker.x, tracker.y); rotate(theta); rect(0, 0, rad, rad); popMatrix(); } } Tracker5 tracker; Leader leader; HScrollbar hsr; HScrollbar hsf; float timeslice = 0.1; color bgcolor = #ffffff; color fgcolor = color(8,32,128,32); void setup() { size(480,480,P3D); background(bgcolor); tracker = new Tracker5(width/2, height/2); tracker.setColor(fgcolor); leader = new Leader(width/2, height/2); PFont font = loadFont("small-6.vlw"); hsr = new HScrollbar(10, height-20, 100, 8, 5, "RATE", font); hsr.setRange(0.01,0.1); hsr.setValue(0.05); hsf = new HScrollbar(10, height-8, 100, 8, 5, "FRICTION", font); hsf.setRange(0.01,0.1); hsf.setValue(0.05); // in general (friction >= rate) is a "better" mouse follower } void draw() { hsr.update(); hsf.update(); tracker.setPhysics(hsr.getValue(), hsf.getValue()); leader.move(1.0); float targetx = leader.x; float targety = leader.y; tracker.setTarget(targetx, targety); float elapsed = 0.0; while (elapsed < 1.0) { tracker.move(timeslice ); tracker.draw(); elapsed += timeslice; } rectMode(CORNER); hsr.draw(); hsf.draw(); } void mousePressed() { if (mouseButton == RIGHT) { background(bgcolor); } } void keyPressed() { if (key=='s') saveFrame("frame.tga"); }