Задача возникла при создании виджета, рисующего график некоторого набора данных. Виджет имеет возможность масштабирования и на масштабе, при котором необходимо отобразить все имеющиеся данные, возникает проблема с тем, что количество данных в десятки и сотни раз больше числа возможных позиций (пикселей) по оси x. Т.е. положим у нас есть 10 000 значений которые необходимо отобразить на графике шириной в 100 пикселей. Для решения проблемы сейчас вычисляется среднее значение от одного "визуализируемого сегмента графика", т.е. 10 000 / 100 - получаем, что в одном пикселе нужно показать 100 значений. Вычисляем среднее от этих 100 значений и отображаем, как значение для данного пикселя.
Но задача заключается в том, чтобы отобразить весь этот набор данных неким гладким сплайном/кривой. Т.е. пусть кривая будет и не слишком точно описывать реальную картину данных, но главное, чтобы выглядело красиво. Что-то подобное, насколько я помню, реализовано в графиках статистики посещаемости соц. сети ВК.
В Сети нашел
https://en.wikipedia.org/wiki/Curve_fitting и в частности про Gauss–Newton алгоритм, но хотелось бы, если возможно, иметь какую-то относительно простую реализацию, как не слишком требовательную к ресурсам (для которой не нужно 100 проходов для получения пристойной кривой), так и легкую для имплементации ни разу не математиком ). Может быть пусть даже это будет не полином, а некоторая функция с отсутствующей производной в некоторых точках - главное, чтобы выглядело более плавно, чем исходный набор.
Сейчас, например картинка выглядит так: