如何用C ++绘制函数

时间:2013-04-13 06:49:19

标签: c++

我想用C ++创建函数图表。任何人都可以帮我入门吗? 假设我想绘制函数y = x(它是通过点(0,0)(1,1)(2,2).....(20,20)等的直线) 我怎么能这样做? (如果你还建议如何绘制y& x轴,那就更好了) 对不起,但它不在书上(欢迎好文本推荐,顺便说一句:-) C ++),网上主要有游戏图形。 我能找到的唯一严重的问题是: somewhat related question asked in this very forum(上帝保佑,我们有stackoverflow!)

9 个答案:

答案 0 :(得分:7)

我会考虑两个选择:

  • 如果你想用C ++做所有事情,你可能需要一个外部库。 OpenGL是一个解决方案,还有Qt,它可能更容易学习,更大(更强大)。
  • 如果你能负担得起输出一个文件并用另一个程序读取它,最简单的方法就是简单地写一个带有坐标点的ASCII文件,并用Octave(免费)绘图。

答案 1 :(得分:4)

您还可以使用Gnuplot,一个交互式绘图程序:您的C ++代码处理和计算您的数据,然后它可以将结果导出到文件或Gnuplot可以处理的标准输出。例如,你可以这样做:

my_program | gnuplot

将根据您的程序调用Gnuplot。

Gnuplot功能非常强大,您可以查看examples available here

Gnuplot output example http://gnuplot.sourceforge.net/demo_cvs/heatmaps.3.png

您可以在此处找到有关C / C ++中Gnuplot的更多信息:

How to plot graphs in Gnuplot in Real time in C++?

更新

另一种可能性是使用R。这种语言在统计学家中非常有名。您可能需要查看some examples

R output example

相关问题:How to run plot of R into C/C++?

答案 2 :(得分:1)

我不知道一个有效的快速简单的方法来做你在c ++中描述的。 您将要么将文本输出到控制台以显示您希望显示的“线条”的效果。或使用directx或opengl设置适当的GUI界面。 许多图书馆确实存在,这简化了设置GUI的任务。但是有最初的开销。

我建议制作一个c#表单应用程序并查看其中的绘制线。它也很容易让你在运行时放入方程而不是硬编码。

答案 3 :(得分:1)

我使用ROOT。这是大多数粒子物理学家使用的,特别是在欧洲核子研究中心和费米实验室。免费。它们具有适用于Linux,Mac和Windows的版本。 http://root.cern.ch/drupal/

很容易制作适合出版的情节,直方图和产出。

编辑:它基于C ++构建,但也有python绑定。

编辑:如果在linux上安装root用于使用带有GCC的ROOT编译代码,例如:

g++ foo.C -o foo `root-config --cflags --libs` -O3  

答案 4 :(得分:1)

三个月前我有同样的问题。我发现为我的应用程序绘图的最好方法是使用Qt框架(因为它已经为您创建了一个GUI,然后利用这个工具:

Qt plotting widget

此小部件在编译并与项目链接时,允许您直接从界面绘制2d图形。这样可以省去写入文件,使用matlab加载等的麻烦。

目前,它只处理2个d图,但将它扩展到三维或表面图并不困难。

祝你好运!

答案 5 :(得分:0)

在这些日子里,我发现了一些事情: 1.本书“C ++编程与图形入门”C.Pozrikidis 2. Visual Studio C++ 2010 express and OpenGL    (参见该页面的最后评论) 谁能提出更好的解决方案? (教科书,免费dll等)

答案 6 :(得分:0)

您可以使用Windows.h中的某些功能。从控制台功能开始。它们是一个很好的起点,使我们能够在控制台上工作,就好像它是笛卡尔平面一样。

虽然我从未尝试过用它们画画。我已经能够为文本显示创建漂亮的表格和布局。与联系人应用程序中的联系人姓名和电话号码一样。

这些功能可以将光标移动到特定的坐标。并在那里写点东西。总的来说,它们像笛​​卡尔飞机一样工作。但只有坐标系不是我们使用的正常坐标系(4个象限),它更像是一个只有一个象限的计算机类型系统,在x轴上从左上o标记,在y轴上从上到下标记。您可能必须构建一些函数,以便优化我们或我们使用的正常系统。

但总而言之,这很有用,你可以尝试一下。

答案 7 :(得分:0)

我安装了gnuplot(非常简单:在硬盘中创建一个文件夹,解压缩并从wgnuplot.exe发送到destop的链接)现在我将数据从Visual Studio(C ++)中导出到.txt文件中然后我从gnuplot窗口调用这些文件。为了节省其他人同样浪费时间和头痛我经历过: - )

我还安装了ROOT,非常简单,cern页面中有一个常规的Microsoft安装程序。链接在这里: http://root.cern.ch/drupal/content/production-version-534 并滚动到页面底部,然后选择与Visual Studio兼容的MSI版本。无论如何,我仍然必须学习如何使用Visual Studio中的ROOT。帮助将不胜感激。 使用ROOT:http://root.cern.ch/phpBB3/viewtopic.php?f=3&t=11641

在Visual Studio中创建项目也有很多帮助

以上所有内容均适用于WINDOWS用户。

答案 8 :(得分:0)

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