如何在C++中制作类似于 MATLAB 的绘图库?



用于教育目的

背景
我正在创建一个小程序,只是为了了解更多关于C++和数值方法的信息。我有基本的功能,但一个很好的缺点是我只能通过控制台窗口输出值。此外,我还想绘制函数图,了解它们的行为。

问题

我该怎么做?使用SDL这样的库会更容易/更实用,但正如我所说,这是为了"启蒙",我想学习如何在不回复库的情况下直接做到这一点。我想我必须调用窗口中的函数才能做到这一点,对吗?

我做了一些研究,了解了QT以及使用它构建应用程序。但我并不想构建一个大规模的应用程序,我想做的是简单地复制matlab的功能,当我调用plot时,它会打开一个小窗口,向我显示plot,我如何在C++中完成这项工作?

-谢谢

如果您想使用纯Win32 API在窗口中显示一个简单的图形,那么Raymond Chen的scratch程序是一个很好的起点:

  • http://blogs.msdn.com/b/oldnewthing/archive/2005/04/22/410773.aspx

它提供了所有的窗口设置代码,而不会对您隐藏任何东西,为您编写PaintContent函数做好了准备。

PaintContent函数接受一个参数,即PAINTSTRUCT结构,到目前为止,最重要的字段是hdc——设备上下文的句柄。

设备上下文是进行任何图形化操作的关键。您可能想从设置坐标开始,这样就可以用图形单位而不是像素进行绘制。为此,这些功能至关重要:

  • GetClientRectSetMapModeSetWindowExtExSetViewportExtEx

一旦设置好坐标系,就可以绘制直线。首先是您的绘图框,您可以使用FrameRect

之后,Polyline将从一个数据数组中绘制一个完整的线序列。

一旦您做到了这一点,请考虑轴记号(MoveToLineTo)和标签(ExtTextOut)。

要得到可识别的图形并不难。与用户的交互,如平移、缩放和数据光标,都是痛苦的地方

"使用直线和曲线"中的MSDN示例应该对绘图非常有帮助。

您的目标平台是什么?

我强烈建议您使用某种图形框架来处理特定于平台的问题。即使是Windows平台也可能具有不同的屏幕大小、分辨率和图形处理。这就是您使用驱动程序和通用API的原因。

如果你想去原始并自己开发一切,你需要学习计算机图形学领域。线性代数也会有所帮助。

不幸的是,您的答案范围太宽太大,无法用于StackOverflow答案
(大学提供图形课程,这只会触及你想要的东西的表面。)

最新更新