float a, a_abs, v, dt; float v1, v2; float fps; float pos, diff; boolean drag; void setup() { size(1250, 150); fps = 60; a_abs = 200; pos = width/2; v = v1 = v2 = 0; a = 0; drag = false; background(0); stroke(255); noFill(); frameRate(fps); } void draw() { dt = 1 / frameRate; if(drag){ v2 = v1; v1 = (mouseX - pmouseX) / dt; v = (v1 + v2)/2; pos = mouseX - diff; } if( !drag ){ if(v != 0) a = -1 * v / abs(v) * a_abs; v += a * dt; pos += v * dt; if( pos < -50 ) pos += width+50; else if( pos > width ) pos -= width+50; if( abs(v) < 10 ){ v = 0; a = 0; } } background(0); translate(pos, height/2-25); noFill(); ellipse(0, 0, 50, 50); line(25,0,100,0); line(50,0,50,50); line(100,0,100,50); line(100,50,150,50); } void mousePressed(){ if( pos-25 < mouseX && mouseX < pos+150 && height/2-50 < mouseY && mouseY < height/2+40){ drag = true; v = v1 = v2 = 0; a = 0; diff = mouseX - pos; } } void mouseReleased(){ if(drag){ drag = false; } }