class Spring {
constructor() {
this.rest = springRest;
this.stiffness = springStiffness;
this.damping = springDamping;
this.mass = springMass;
this.position = 10;
this.lastPosition = -15;
this.delta = 0.1;
this.time = 0;
this.gravity = 0;
}
solve(forcePosition) {
if (forcePosition) {
this.position = forcePosition - this.rest;
}
this.springForce = -this.stiffness * (this.position - this.rest);
this.velocity = this.position - this.lastPosition;
this.springForce += -this.damping * this.velocity;
this.acceleration = (this.springForce + this.gravity) / this.mass;
this.nextPosition = 2 * this.position - this.lastPosition + this.acceleration * this.delta * this.delta;
this.lastPosition = this.position;
this.position = this.nextPosition;
this.time += this.delta;
}
}