我想用 C++ 创建函数图表。任何人都可以帮助我开始吗?假设我想绘制函数 y=x (它是一条通过点 (0,0) (1,1) (2,2) ..... (20,20) 等的直线)如何我能做到吗?(如果您还建议如何绘制 y 和 x 轴,那就更好了)对不起,但它不在书本上(顺便说一下,欢迎推荐好的文本 :-) C++)并且在网上主要参考游戏图形。我能找到的对我的问题的唯一认真参考是: 在这个论坛上提出了一些相关的问题 (上帝保佑,我们有 stackoverflow!)
9 回答
您还可以使用交互式绘图程序Gnuplot:您的 C++ 代码处理和计算您的数据,然后它可以将结果导出到文件或 Gnuplot 可以处理的标准输出。例如,您可以执行以下操作:
my_program | gnuplot
它将使用您的程序结果调用 Gnuplot。
Gnuplot 非常强大,您可以在此处查看可用的示例。
(来源:sourceforge.net)
您可以在此处找到有关 C/C++ 中 Gnuplot 的更多信息:
更新
我不知道一种有效的快速简单的方法来做你在 C++ 中描述的事情。您要么将文本输出到控制台以显示您希望显示的“线条”的效果。或使用 directx 或 opengl 设置适当的 GUI 界面。许多库确实存在,它们简化了设置 GUI 的任务。但有初始开销。
我建议制作 ac# 表单应用程序并查看其中的绘图线。它还可以让您轻松地在运行时输入方程式,而不是对它们进行硬编码。
大约三个月前,我也有同样的问题。我发现为我的应用程序绘制的最佳方法是利用该Qt
框架(因为它已经为您创建了一个 GUI,然后利用此工具:
此小部件在编译并与您的项目链接后,允许您直接从界面中绘制 2d 图形。这样可以省去写入文件、使用 matlab 加载等的麻烦。
目前,它只处理二维图,但将其扩展到三个维度或曲面图并不难。
祝你好运!
我使用ROOT。这是大多数粒子物理学家使用的方法,尤其是在 CERN 和费米实验室。免费。它们有适用于 Linux、Mac 和 Windows 的版本。 http://root.cern.ch/drupal/
制作图表、直方图和生成适合出版的输出很容易。
编辑:它建立在 C++ 之上,但也有 python 绑定。
编辑:如果在 linux 上安装 root 以使用带有 GCC 的 ROOT 编译代码,请执行以下操作:
g++ foo.C -o foo `root-config --cflags --libs` -O3
在这些天里,我发现了几件事: 1. “C++ 编程和图形简介”一书 C.Pozrikidis 2. Visual Studio C++ 2010 express 和 OpenGL (请参阅该页面中的最后一条评论)任何人都可以提出更好的解决方案吗?(教科书、免费 dll 等)
您可以使用 Windows.h 中的一些功能。从控制台功能开始。它们是一个很好的起点,使我们能够像在笛卡尔平面上一样在控制台上工作。
虽然我从来没有尝试过和他们一起画画。我已经能够为文本演示创建漂亮的表格和布局。就像联系人的姓名和电话号码作为联系人应用程序中的表格一样。
这些功能可以将光标移动到特定坐标。并在那里写一些东西。总体而言,它们非常像笛卡尔平面一样工作。但只有坐标系不是我们使用的正常坐标系(4 个象限),它更像是一种计算机类型系统,只有一个象限,在 x 轴上从左到右标记,在 y 轴上从上到下标记。您可能必须构建一些功能以优化此系统或我们使用的正常系统。
但总而言之,它很有用,你可以试试。
我安装了 gnuplot(非常简单:在硬盘中创建一个文件夹,解压缩并从 wgnuplot.exe 发送到 destop 的链接),现在我将要从 Visual Studio(C++)绘制的数据导出到 .txt 文件中,然后我从 gnuplot 窗口调用这些文件。只是为了向其他人节省我经历过的同样的时间浪费和头痛:-)
我也安装了ROOT,很简单,cern页面里有正规的微软安装程序。这是链接: http ://root.cern.ch/drupal/content/production-version-534 并滚动到页面底部,然后选择与您的 Visual Studio 兼容的 MSI 版本。无论如何,我仍然必须学习如何在 Visual Studio 中使用 ROOT。帮助将不胜感激。这个页面也有助于在 Visual Studio 中使用 ROOT 创建项目:http ://root.cern.ch/phpBB3/viewtopic.php?f=3&t=11641
以上所有内容均适用于 WINDOWS 用户。
i was just plotting a simmilar function y=x²
in windows, or any library based on windows you will probably intercept message WM_PAINT
case WM_PAINT:
HDC hdc = beginpaint();
// change device contexts hdc y axys orientation
// change logical coordinates of point (0,0) to half of width and half of //eight of your client area
// u might want to change from pixels to mm
// for each x from -10 to 10 y = x²
// draw a little line for each point in this range
// end painting, this will release hcd