绘制具有给定双坐标的图形

Posted

技术标签:

【中文标题】绘制具有给定双坐标的图形【英文标题】:Plotting a graph with given double coordinates 【发布时间】:2011-12-28 14:52:46 【问题描述】:

我收到一个坐标数组(double 坐标与-infinity < x < +infinity0 <= y <= 10)并想使用这些点绘制一条折线。我希望图表始终从图像的左边框开始,并在右侧结束。我图像的底部边框始终代表 0 y-value,顶部边框始终代表 10 y-value。创建的图像的宽度和高度由用户在运行时决定。

我想使用 Qt 来实现这一点,QImageQPainter 组合似乎是我选择的主要武器。我目前正在尝试解决的问题是:

如何将我的坐标转换为图像中的像素?

y-values 似乎相当简单,因为我事先知道图表的最小值和最大值,但我正在努力处理 x-values。到目前为止,我的方法是找到 min- 和 max-x-value 并分别缩放每个点。

有更原生的方法吗?

由于一组坐标适用于具有不同宽度和高度的多个图像,我想知道矢量图(svg)是否可能是更合适的方法,但我找不到在 Qt 中创建 svg 文件的材料,只使用现有文件。我会寻找与 Windows 元文件相当的东西。

Qt 中是否有与元文件相近的匹配?

【问题讨论】:

【参考方案1】:

QGraphicsScene 在这种情况下可能会有所帮助。您可以使用addPolygon()addPath() 绘制图形。然后用QGraphicsScene::render()将场景渲染成位图

sceneRect 会随着您向其中添加项目而自动增长。在“绘图”结束时,您将获得图形的最终大小/边界。创建一个QImage 并将其用作painter back store 来渲染场景。

QGraphicsScene 还允许您操纵变换矩阵以适应方向和缩放以满足您的需要。

【讨论】:

【参考方案2】:

使用 QtOpenGL 将 2d 图形渲染到 openGL 上下文的另一种方法。不需要坐标的转换/缩放。一旦您通过了 opengl 基础知识,您就可以选择适当的 viewPort / eye 参数来实现任何缩放/平移级别。

【讨论】:

不必进行转换或缩放固然很棒,但 OpenGL 在绘制一条多段线等“小”操作时不是很昂贵吗? @nijansen 我最近分析过任何 QT 应用程序,但 openGl 通常是硬加速的,所以如果有什么不同的话,它会更快

以上是关于绘制具有给定双坐标的图形的主要内容,如果未能解决你的问题,请参考以下文章

绘制双坐标轴的图形3-不同的plot类型

MATLAB绘制二维图时如何使坐标轴名字显示在右侧?

matlab里怎么画一个x轴两个y轴的图

如何获取图形工具中特定布局算法绘制的图形的坐标?

如何在Java中实现画图功能并在文本中显示坐标

求一个C语言图形变换程序,先进行图形绘制,后能进行图形复制、移动、缩放、旋转,跪求啦。。。