在 Visual Studio C++ 2008(控制台 win32)中绘制 x-y 图形的简单示例?

问题描述 投票:0回答:2

在阅读了我在这里和谷歌中找到的几乎所有内容之后,我还没有找到关于在 Visual Studio 2008 中用 C++(控制台应用程序 win32,黑色的)绘制 x-y 值的简单直接的解决方案/示例。基于 this post,我应该使用 MsChart 控件,有人愿意分享一个简单的例子吗?

This post,以及许多其他人,谈论不属于 Visual Studio 的库(因此它们不会与 EXE 一起编译,因此它不会作为结果 EXE 的一部分包含在内)或显示图形与Excel。我只想得到一个简单的x-y图形(以及穿过这些点的线),根本不担心它是否是全世界最丑陋和最简单的图形,但它必须在我的代码运行后自动出现(也许在一个新窗口中)或者也许在控制台内?)并且如果我在距离我的电脑数千公里的另一台电脑上运行此 EXE,则在代码运行后图形仍然会出现。

我问的东西太复杂了吗?无聊的??我希望我能得到一些答案/示例/解决方案,而不是这篇文章被关闭 =) 提前致谢!


@Koushik 再次感谢您的支持!即使我了解了整个情况,我也需要一个清晰的例子才能正确理解,所以为了投票,我想测试这个简单的例子:

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

double f(const double &x) {
    return (
        sin(x)*exp(-x));
}

int main()
{
    unsigned Nplot = 100;
    double x_low = 0.0;
    double x_high = 20.0;
    double h = (x_high - x_low)/(double)Nplot;

    for (unsigned i=0;i<=Nplot;i++)
    {
        double x = x_low + i*h;
        cout << setw(20) << x <<
                setw(20) << f(x) << endl;
    }

    system("pause>nul");
    return 0;
}

这是生成 sin(x) 函数的非常基本的代码。如果您将其复制/粘贴到 VC++ 2008 中的控制台应用程序 Win32 中(新项目/Visual C++/Win32/控制台应用程序 Win32/空项目/),数据将出现在屏幕中:

enter image description here

然后,将这些值放入 Excel 中会得到:

enter image description here

我想要这个,但是输出窗口应该在值出现在控制台中之后出现,更重要的是,代码不能依赖于 excel 或 Visual C++ 外部的其他东西。因此,编写一些额外的代码来绘制这条线,并在编译后,两者都必须在任何计算机中出现/工作,特别是在没有 VS 或任何库的计算机中,只需在 Windows 中运行 EXE,仅此而已。那么,有可能吗?您能分享一个简单的代码示例来绘制这条线(将其添加到上面的代码中)吗?谢谢!

visual-c++ plot console-application
2个回答
0
投票

您可以使用 system("appname"); 调用 gui 应用程序或更确切地说任何其他应用程序。包含 stdlib.h 标头。您可以做的是创建控制台应用程序并准备数据。将这些数据存储在文件中,打开可以从文件中读取数据并绘制数据的应用程序。

如果您的目标只是绘制数据,那么 GUI 应用程序编写起来也不会那么困难。在控制台中您真的无法绘制东西。在turbo c++中我们有这个选项,因为它主要是为dos创建的。

算法: 1) 准备数据,即沿 x 轴的时间和沿 y 轴的幅度。使用您自己的格式将其存储在文件中。例如:x-ais 数据 y 轴数据。

2).准备一个可以绘制图形的GUI应用程序。使用表单的 CreateGraphics() 方法来绘制线条,即轴和数据线。 CreateGraphics::drawLine() 和 CreateGraphics::drawLines() 应该有助于您的进步。

编辑: 您可以将命令行参数传递给 GUI 应用程序。这个参数可以是数据文件路径


0
投票

对于控制台应用程序来说,最简单的事情是在计算数据后,在屏幕上创建一个窗口(是的,控制台应用程序允许使用 GUI),然后使用

WM_PAINT
/
BeginPaint
/ 处理 
PolyLine
/
EndPaint
,使用一些适当的缩放,使数据 (1) 正面朝上并 (2) 适合窗口。

您不会有任何网格线或轴标签,只有绘制的线,但这是最低限度,并且可以轻松完成,无需使用或重新创建整个图形库。

有关如何向程序添加 GUI 的示例,请尝试 Raymond Chen 的暂存程序,C++ 版本。创建一个窗口需要相当多的代码,但幸运的是,您唯一需要更改的是

PaintContent()
函数。

使用

Polyline
几乎如您所要求的一样简单——它接受一组数据点。

如果您确实想添加网格线和标签,更多的

Polyline
调用和
ExtTextOut
函数就可以解决问题,但很快您就会需要
CreatePen
SelectObject
来控制线条颜色和样式(点、虚线等)。并注意顺序——先画底部的东西,以便后面的调用可以覆盖顶部。


另一方面,如果不需要单个可执行文件,我建议您提供 Gnuplot 的副本(

pgnuplot
可执行文件是为从另一个程序调用而设计的)。首先使用
wgnuplot
调整绘图选项,然后将它们与数据一起传递到
pgnuplot
。通过这种方式,您将免费获得合理的缩放、网格线和标签,并将结果导出为常见格式,例如 PNG。

© www.soinside.com 2019 - 2024. All rights reserved.