Как нарисовать сглаженные / закругленные / изогнутые линейные графики? (C #)

Я измеряю некоторые данные о производительности системы, чтобы сохранить их в базе данных. По этим точкам данных я рисую линейные графики с течением времени. По своей природе эти точки данных немного зашумлены, т.е. каждая точка отклоняется хотя бы немного от местного среднего значения. При рисовании линейного графика прямо от одной точки к другой он создает неровные графики. В крупном масштабе времени, например,> 10 точек данных на пиксель, этот шум сжимается в широкую зубчатую область линии, которая, скажем, имеет высоту 20 пикселей вместо 1 пикселя, как в более мелких масштабах.

Я читал о сглаживании линий, анти -алисинг, упрощение и все такое. Но все, что я нашел, похоже, о другом.

Мне не нужно сглаживание, .NET уже делает это за меня, когда рисует линию на экране.

Я не хочу упрощения. Мне нужно, чтобы крайние значения оставались видимыми, по крайней мере, большинство из них.

Я думаю, что это идет в направлении сплайновых кривых, но я не смог найти много примеров изображений, чтобы оценить, является ли описанная вещь тем, что я хочу. Я все же нашел в Google Книгах высоконаучную книгу, полную формул длиной в полстраницы, которую я не хотел сейчас читать ...

Чтобы дать вам пример, просто посмотрите на приложение системного монитора Linux / Gnome. Я рисую сглаженной линией недавнее использование процессора / памяти / сети. Это может быть немного упрощено, но я бы попробовал и посмотрел, смогу ли я его настроить.

Я бы предпочел код C #, но алгоритмы или код на других языках тоже подойдут, если я могу портировать это на C # без внешних ссылок.

7
задан ygoe 8 December 2010 в 15:00
поделиться