Построение графика с заданными двойными координатами - PullRequest
1 голос
/ 28 декабря 2011

Я получаю массив координат (double координаты с -infinity < x < +infinity и 0 <= y <= 10) и хочу нарисовать ломаную линию, используя эти точки.Я хочу, чтобы график всегда начинался с левой границы моего изображения и заканчивался справа.Нижняя граница моего изображения всегда представляет значение 0 y, а верхняя граница - всегда значение 10 y.Ширина и высота создаваемого изображения определяются пользователем во время выполнения.

Я хочу реализовать это с помощью Qt, и QImage в сочетании с QPainter кажутся моим основным оружием выбора,Проблема, которую я сейчас пытаюсь решить:

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

Значения y кажутся довольно простымиТак как я заранее знаю минимум и максимум графика, но я борюсь с x -значениями.Пока что мой подход заключается в том, чтобы найти минимальное и максимальное значение x и масштабировать каждую точку соответственно.

Есть ли более нативный подход?

Так какодин набор координат служит для нескольких изображений с различной шириной и высотой, я подумал, может ли векторная графика быть более подходящим, но я пока не смог найти материал по созданию svg-файлов в Qt, просто работая с существующимифайлы.Я бы искал что-то сравнимое с метафайлами Windows.

Есть ли близкое совпадение с метафайлами в Qt?

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

QGraphicsScene может помочь в этом случае. Вы строите график с помощью либо addPolygon(), либо addPath(). Затем визуализируйте сцену в растровое изображение с QGraphicsScene::render()

sceneRect будет автоматически расти по мере добавления к нему элементов. В конце «построения» вы получите окончательный размер / границы графика. Создайте QImage и используйте его в качестве хранилища для рисования для визуализации сцены.

QGraphicsScene также позволяет вам манипулировать матрицей преобразования в соответствии с вашими требованиями.

1 голос
/ 28 декабря 2011

Еще одна альтернатива для использования QtOpenGL для отображения вашего 2d-графика в контексте openGL.Преобразование / масштабирование координат не требуется.Пройдя основы OpenGL, вы можете выбрать подходящие параметры viewPort / eye для достижения любого уровня масштабирования / панорамирования.

...