5

我想用 C++ 创建函数图表。任何人都可以帮助我开始吗?假设我想绘制函数 y=x (它是一条通过点 (0,0) (1,1) (2,2) ..... (20,20) 等的直线)如何我能做到吗?(如果您还建议如何绘制 y 和 x 轴,那就更好了)对不起,但它不在书本上(顺便说一下,欢迎推荐好的文本 :-) C++)并且在网上主要参考游戏图形。我能找到的对我的问题的唯一认真参考是: 在这个论坛上提出了一些相关的问题 (上帝保佑,我们有 stackoverflow!)

4

9 回答 9

8

我会考虑两种选择:

  • 如果你想用 C++ 做所有事情,你可能需要一个外部库。OpenGL 是一个解决方案,还有Qt,它可能更容易学习并且更大(并且更强大)。
  • 如果您有能力输出一个文件并用另一个程序读取它,最简单的方法是简单地编写一个带有点坐标的 ASCII 文件,并使用Octave(免费)绘图。
于 2013-04-19T15:03:33.170 回答
4

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

my_program | gnuplot

它将使用您的程序结果调用 Gnuplot。

Gnuplot 非常强大,您可以在此处查看可用的示例

Gnuplot 输出示例
(来源:sourceforge.net

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

如何在 C++ 中实时在 Gnuplot 中绘制图形?

更新

另一种可能性是使用R。这种语言在统计学家中非常有名。您可能想查看一些示例

R 输出示例

相关问题:如何将 R 的绘图运行到 C/C++ 中?

于 2013-05-22T09:35:06.500 回答
1

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

我建议制作 ac# 表单应用程序并查看其中的绘图线。它还可以让您轻松地在运行时输入方程式,而不是对它们进行硬编码。

于 2013-04-13T07:12:52.667 回答
1

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

Qt 绘图小部件

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

目前,它只处理二维图,但将其扩展到三个维度或曲面图并不难。

祝你好运!

于 2013-05-22T11:49:03.590 回答
1

我使用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  
于 2013-05-22T10:00:19.130 回答
0

在这些天里,我发现了几件事: 1. “C++ 编程和图形简介”一书 C.Pozrikidis 2. Visual Studio C++ 2010 express 和 OpenGL (请参阅该页面中的最后一条评论)任何人都可以提出更好的解决方案吗?(教科书、免费 dll 等)

于 2013-04-19T14:51:45.167 回答
0

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

虽然我从来没有尝试过和他们一起画画。我已经能够为文本演示创建漂亮的表格和布局。就像联系人的姓名和电话号码作为联系人应用程序中的表格一样。

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

但总而言之,它很有用,你可以试试。

于 2013-04-19T15:38:30.883 回答
0

我安装了 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 用户。

于 2013-06-11T11:35:48.630 回答
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
于 2017-04-19T09:48:28.360 回答