1 (16.08.2016 15:55:20 отредактировано Xeenych)

Тема: Вывод большого количества точек на график

Есть сотня тысяч (а может, миллион) точек y=f(x).
double[] x
double[] y

Если выводить все точки на график, то
1. Часть точек попадет на один и тот же пиксел на экране
2. Вывод будет очень медленным

Нужно как-то ограничить количество выводимых точек, а при масштабировании графика сохранять детализацию.

2

Re: Вывод большого количества точек на график

Такая же проблема, не знаю как это пофиксить. Использовал FilteredPointList может вам поможет, но он предназначен для монотонных и равномерных прямых, и были какие то косяки

3

Re: Вывод большого количества точек на график

Да вобщем-то пришлось кое-что дописать самому.

Сделал собственный filteredpointlist, но в отличие от родного с рядом улучшений.

В родном fpl при добавлении точки на график он "дрожит". Каждый раз для вывода на экран выбирается новая точка.
Я убрал дрожание следующим образом:
Допустим, нужно вывести 100 точек между xmin и xmax
Весь интервал делится на 100 участков. В каждом участке ищется максимальное и минимальное значения. Оба эти значения выводятся на график. Таким, образом, единичные всплески или помехи (если выводить сигналы ) всегда будут видны на графике.

В основе fpl лежит просто List<XYPair>. XYPair - структура из double X,Y.
В результате все это жрет минимум памяти и позволяет в реальном времени рисовать графики из миллиона точек (выводятся естественно только необходимые).

Поиск точки в масисве ведется методом половинного деления.

Вообще все это можно еще ускорить, применив какую-то другую структуру данных для хранения пар XY и более оптимальные алгоритмы поиска интервалов и макимума-минимума в интервале.