Требуется быстрый С++ qt/qwt разброс графика

У меня огромная - около 3 миллионов пар - массив двумерных точек, которые мне нужно визуализировать с разумной скоростью в приложении на основе Qt.

Я пробовал использовать QGraphicsScene, но очень медленно даже на 400000 примитивах, поэтому вместо этого я искал в qwt-библиотеку.

Он имеет пример скриншота примера фрагмента рисунка на его странице sf, который выглядит точно, что мне нужно, но я не могу найти ни одного фактического код, который может использоваться для этих данных, а также API в qwt docs - он упоминает только разные типы кривых.

Поэтому было бы неплохо получить некоторые указатели на примеры вариантов разброса и некоторые советы по его производительности. Также приветствуются предложения для других С++ qt-совместимых графических библиотек, которые могут справиться с этим объемом данных.

Ответ 1

График рассеяния содержится в примере "в реальном времени: то, что вы хотите, это класс IncrementalPlot. Я также предлагаю, чтобы рисовать все 3 миллиона очков не было разумно, поскольку современные экраны имеют всего около 2 миллионов пикселей:) Таким образом, кажется, что лучше упростить график заранее, объединив соседние точки в один с порогом, зависящим от коэффициент масштабирования.

Ответ 2

Как отметил Винус, создание диаграмм рассеяния с 3 миллионами точек, вероятно, не очень хорошая идея.

Я добился хорошей производительности, создавая графики 3D-рассеяния с 30 000 точками, используя OpenGL. OpenGL работает быстро и хорошо интегрируется с Qt. Тем не менее, это API низкого уровня, который заставляет вас делать много утомительного кодирования.

VTK может быть другой опцией.

Ответ 3

MathGL является бесплатной (GPL) кросс-платформенной графической библиотекой. Он был написан на С++ и имеет виджет Qt. Кроме того, это довольно быстро, но 3 миллиона очков... для моего ноутбука требуется около 30 секунд.

Ответ 4

Вы предлагаете использовать OpenGL как @vines, и, в частности, использовать или отображать списки glGenList или вершинные буферы. Несколько миллионов точек в качестве примитивных вершин не должно быть так сложно.