step method

bool step(
  1. double dt
)

Advances dt seconds. Returns true on settle (|1−x| < 0.001 ∧ |v| < 0.02).

Implementation

bool step(double dt) {
  const h = 1 / 240;
  final steps = math.max(1, math.min(16, (dt / h).ceil()));
  final s = dt / steps;
  for (var i = 0; i < steps; i++) {
    final a = k * (1 - x) - c * v;
    v += a * s;
    x += v * s;
  }
  return (1 - x).abs() < 0.001 && v.abs() < 0.02;
}