Seconds until the spring has settled, so a render can be sized by the motion rather than guessed.
A spring approaches its target asymptotically and has no natural end, which is awkward when the
page count has to be a number: duration: springDuration(config) turns the physics into that
number instead of leaving it to trial and error.
Found by walking the closed-form solution rather than solving the envelope analytically, because
the envelope is only an upper bound — an underdamped spring can sit inside it while still
swinging through the target, and the honest answer is when it stops moving, not when the bound
gets small.
Seconds until the spring has settled, so a render can be sized by the motion rather than guessed.
A spring approaches its target asymptotically and has no natural end, which is awkward when the page count has to be a number:
duration: springDuration(config)turns the physics into that number instead of leaving it to trial and error.Found by walking the closed-form solution rather than solving the envelope analytically, because the envelope is only an upper bound — an underdamped spring can sit inside it while still swinging through the target, and the honest answer is when it stops moving, not when the bound gets small.