float M = 0.8; // Mass float K = 0.2; // Spring constant float D = 0.92; // Damping float R = 100; // Rest position float ypos; // Position float v = 0.0; // Velocity float a = 0; // Acceleration float f = 0; // Force boolean released = false; void setup() { size(200, 200); ypos = height/2; } void draw() { background(200); if(released)move(); ellipse(width/2, ypos , 50,50); } void move(){ f = -K * (ypos - R); // f=-ky a = f / M; // Set the acceleration, f=ma == a=f/m v = D * (v + a); // Set the velocity ypos += v; // Updated position if(abs(v) < 0.01) { v = 0.0; released = false; } } void mouseMoved() { if(dist(mouseX,mouseY,width/2,ypos)<50) stroke(255,0,0); else stroke(0); } void mouseDragged() { released = false; ypos = mouseY; } void mouseReleased(){ released = true; }