По сути, это просто математика.
У вас есть неизвестное выражение y = ax 3 + bx 2 + cx + d. Вы можете отбросить довольно много терминов, определив x '= (x-startX) / endX (то есть startX' = 0, endX '= 1). Вам также придется масштабировать склоны; startSlope '= startSlope * 1 / (endX-startX).
Из этого следует, что d '= startY. Это ваш первый бесплатный параметр.
Далее отметим, что наклон тривиально получается дифференцированием. dy / dx '= 3a'x' 2 + 2b'x '+ c'. Следовательно, c 'это просто startSlope'.
a 'и b' принимают пару уравнений: endY = a '+ b' + c '+ d' и endSlope = 3a '+ 2b' + c '+ d'. Следовательно, a '= endSlope' - 2 * endY, а b '= 3 * endY - endSlope'.