Extracted init from update.
A ton of little refactorings for clarity. Also simplified the algorithm for computing control points. This makes it easier to tweak the constants.