@i_v

Как построить гладкую кривую по избыточному количеству точек?

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

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

Сейчас, например картинка выглядит так:
6a0ad357cd1e4660854688421c7f2b07.png
  • Вопрос задан
  • 402 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Eddy_Em
Скользящая медиана по нужному количеству точек спасет.
P.S. Если нужно строго сохранить интеграл под кривой, то скользящее среднее.
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Интерполяция, аппроксимация, экстраполяция.
Ответ написан
@d0002
Студент
Кроме интерполяции можно попробовать брать среднее на промежутке графика, который охватывает один пиксель, строить по локальным/глобальным минимумам (ключевым точкам графика).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы