struct Spring { float mass = 1.f; // Mass of the weight on the end of the spring float k = 4; // Spring Constant, in N / m float c = 1; // Viscous damping constant, in N / m/s float force = 0.f; float velocity = 0.f; float position = 0.f; }; void updateSpring(Spring* spring, float dtSeconds) { spring->force = spring->c * spring->velocity + spring->k * spring->position; float acceleration = spring->force / spring->mass; // F = ma spring->velocity = spring->velocity + acceleration * dtSeconds; spring->position = spring->position + spring->velocity * dtSeconds; }