Я измеряю некоторые данные о производительности системы, чтобы сохранить их в базе данных. Из этих точек данных я рисую линейные графики с течением времени. По своей природе эти точки данных немного шумные, т.е. каждая точка отклоняется, по крайней мере, немного от локального среднего значения. Рисуя линейный график прямо из одной точки в другую, он создает неровные графики. При большом масштабе времени, таком как> 10 точек данных на пиксель, этот шум сжимается в область с широкими зубчатыми линиями, которая, скажем, имеет высоту 20 пикселей вместо 1 пикселя, как в меньших масштабах.
Я читал про сглаживание линий, сглаживание, упрощение и все эти вещи. Но все, что я нашел, похоже, связано с чем-то другим.
Мне не нужно сглаживать, .NET уже делает это для меня при рисовании линии на экране.
Я не хочу упрощения. Мне нужно, чтобы крайние значения оставались видимыми, по крайней мере, большинство из них.
Я думаю, что это идет в направлении сплайновых кривых, но я не смог найти много примеров изображений, чтобы оценить, является ли описанная вещь тем, что я хочу. Я нашел в Google Книгах очень научную книгу, в которой много формул длиной в полстраницы, которые я не любил читать сейчас ...
Чтобы привести пример, просто взгляните на приложение системного монитора Linux / Gnome. Я рисую недавнее использование процессора / памяти / сети сглаженной линией. Это может быть немного упрощено, но я бы попробовал и посмотрел, смогу ли я его настроить.
Я бы предпочел код на C #, но алгоритмы или код на других языках тоже подойдут, если я могу перенести его на C # без внешних ссылок.