用于教育目的
背景
我正在创建一个小程序,只是为了了解更多关于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
——设备上下文的句柄。
设备上下文是进行任何图形化操作的关键。您可能想从设置坐标开始,这样就可以用图形单位而不是像素进行绘制。为此,这些功能至关重要:
GetClientRect
、SetMapMode
、SetWindowExtEx
、SetViewportExtEx
一旦设置好坐标系,就可以绘制直线。首先是您的绘图框,您可以使用FrameRect
。
之后,Polyline
将从一个数据数组中绘制一个完整的线序列。
一旦您做到了这一点,请考虑轴记号(MoveTo
和LineTo
)和标签(ExtTextOut
)。
要得到可识别的图形并不难。与用户的交互,如平移、缩放和数据光标,都是痛苦的地方
"使用直线和曲线"中的MSDN示例应该对绘图非常有帮助。
您的目标平台是什么?
我强烈建议您使用某种图形框架来处理特定于平台的问题。即使是Windows平台也可能具有不同的屏幕大小、分辨率和图形处理。这就是您使用驱动程序和通用API的原因。
如果你想去原始并自己开发一切,你需要学习计算机图形学领域。线性代数也会有所帮助。
不幸的是,您的答案范围太宽太大,无法用于StackOverflow答案
(大学提供图形课程,这只会触及你想要的东西的表面。)