Задача реализовать кубический сплайн. Пользователь забивает в программу точки с помощью кликов мыши, а по ним в реальном времени строится кривая. Можно добавить возможность перетаскивать точки (положение кривой обновляется), перетаскивать саму кривую и т.д.
Кубический сплайн был реализован в виде S(x) = fi * (t - 1)^2 * (2t + 1) + (fi+1) * t^2 * (3 - 2t) + mi*hi * t * (1 - t)^2 - (mi+1)*hi * t^2 * (1 - t), где t = (x - xi)/hi, hi = (xi+1 - xi), mi = S'(xi).
Условие непрерывности второй производной: S''((xi) - 0) = S''((xi) + 0). Представлено в виде: qi * (mi - 1) + 2mi + pi * (mi + 1) = 3 * (pi * ((fi+1) - fi)/hi + qi * (fi - (fi-1))/(hi-1)), где pi = (hi-1)/((hi-1) + hi), qi = 1 - pi = hi/((hi-1) + hi). Получается система уравнений с 3-мя неизвестными, находим их методом прогонки.