我是一名机械工程师,对C编程只有有限的知识。我写了一些代码,以便进行模拟,我想可视化模拟结果。目前我正在使用Dev-C编写代码。通过fopen和fprintf命令,我生成了一个包含结果的.dat文件。然后我打开GNUPLOT程序并导入我的.dat文件来绘制结果。这需要时间,我必须等到模拟结束。有没有简单的方法将我的绘图仪连接到Dev-C,这样我的绘图仪就可以在模拟过程中开始绘制数据?任何库或等等?
Dev-C
fopen
fprintf
.dat
GNUPLOT
r55awzrz1#
既然你已经知道了gnuplot,那么最简单的方法就是从你的程序中调用gnuplot,并将数据通过管道传递给它:
FILE *gnuplot = popen("gnuplot", "w"); fprintf(gnuplot, "plot '-'\n"); for (i = 0; i < count; i++) fprintf(gnuplot, "%g %g\n", x[i], y[i]); fprintf(gnuplot, "e\n"); fflush(gnuplot);
krcsximq2#
我一直在使用PLPlot从C绘图,并发现它既有效又简单。它是跨平台的,开源的,并支持丰富的绘图功能。我建议看看示例来开始。
6tr1vspr3#
好的,一个解决方案是,当你写出一个文件时,只需要在你写出文件时调用system(),然后调用gnuplot。但是,这意味着你每次都应该改变文件名,但是我担心如果你这样做,它看起来就不正确了,因为你每次都发送少量的数据。http://www.gnu.org/software/libc/manual/html_node/System-Calls.html我从来没有使用过gnuplot,但是如果你看一下这个页面(http://gnuplot-tricks.blogspot.com/),你可能会发现一些技巧,可以使它工作得很好。但是,我认为,除非您打算自己绘制所有内容,并跳过gnuplot,否则您可能只需要等待,就像您一样。你可能会发现gnuplot的C接口可以帮助你:http://ndevilla.free.fr/gnuplot/
system()
mrwjdhj34#
pbPlots非常易于使用,可以与所有C编译器一起使用。从github page下载pbPlots.c/h和supportLib.c/h并将它们包含在构建中。这里是一个完整的例子,将产生一个绘图在PNG文件。
#include "pbPlots.h" #include "supportLib.h" int main(){ double x [] = {-1, 0, 1, 2, 3, 4, 5, 6}; double y [] = {-5, -4, -3, -2, 1, 0, 1, 2}; RGBABitmapImageReference *imageRef = CreateRGBABitmapImageReference(); DrawScatterPlot(imageRef, 600, 400, x, 8, y, 8); size_t length; double *pngData = ConvertToPNG(&length, imageRef->image); WriteToFile(pngData, length, "plot.png"); return 0; }
还有很多可用的选项,这些都在github页面上描述。
gstyhher5#
有一个广泛的库称为DISLIN用于科学目的。即使在Fortran语言可用。您可以在官方网站上查看示例。您可以在DISLIN Homepage中免费获取
gijlo24d6#
我稍微看了一下周围的人,看看他们在gnuplot中对实时绘图做了什么,发现了这个:http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html有一个小的Perl脚本可以驱动绘图,你只需要输入你的信息。由于要将数据写入文件,因此可能需要tail -f yourdata.dat并将其通过管道传输到实时绘图仪中。另外,由于您使用的是stdio文件调用,因此需要定期刷新(通过调用fflush)显然你的模拟会在后台或其他shell中运行,这样你就可以在任何时候脱离绘图而不中断模拟。希望对你有用。
tail -f yourdata.dat
fflush
bpzcxfmw7#
使用C编程语言逐步解决绘图问题:步骤1要求:1. Windows 10/11 64 bit 2. Install eclipse IDE(CDT或科学计算)3.使用MSYS 2安装MSYS 2 4. Installmingw64 c编译器所需的组件,并将其二进制路径添加到Windows环境变量5.使用MSYS 2安装mathgl库:
mingw64
mathgl
第2步Crete eclipse project witch includes required mathgl required library.将所需的库添加到项目:右键点击项目-〉展开C/C++ Build -〉Setting -〉展开MinGW C Linker(如果没有展开)-〉Libraries -〉Libraries(-l)-〉add...这里必须添加mgl2和mgl2-fltk:步骤3(final)编写代码绘制:在project下创建一个.c文件,并将下面的代码写入其中。
mgl2
mgl2-fltk
#include <mgl2/mgl_cf.h> //#include <mgl2/wnd_cf.h> #include <mgl2/fltk.h> #include <synchapi.h> HMGL gr = NULL;//HMGL mgl_create_graph_fltk int main(int argc,char **argv) { gr = mgl_create_graph_fltk(NULL, "First C graph", NULL, NULL); double x[50]={0}; HMDT dat=mgl_create_data_size(50, 1, 1); while(1) { Sleep(100); mgl_clf ( gr) ; mgl_set_range_val(gr, 'y', -1, 1); mgl_set_range_val(gr, 'x', 0, 512); mgl_set_origin(gr, 0, 0, 0); // mgl_box(gr); mgl_axis(gr, "", "", ""); mgl_set_font_size(gr, 1.5); // mgl_grid(gr, a, "", ""); int i=0; while(i<50) { x[i]=(mgl_rnd()*2)-1; i++; } mgl_data_set_double(dat, x, 50, 1, 1); // mgl_line(gr,0,0,0,2*mgl_rnd()-1,2*mgl_rnd()-1,0,"Ar2",-.5); mgl_stem(gr, dat, "ro", ""); // mgl_wnd_update(gr); } return 0; }
生成此代码后,您将发现debug文件夹中包含一个可执行文件。
7条答案
按热度按时间r55awzrz1#
既然你已经知道了gnuplot,那么最简单的方法就是从你的程序中调用gnuplot,并将数据通过管道传递给它:
krcsximq2#
我一直在使用PLPlot从C绘图,并发现它既有效又简单。它是跨平台的,开源的,并支持丰富的绘图功能。我建议看看示例来开始。
6tr1vspr3#
好的,一个解决方案是,当你写出一个文件时,只需要在你写出文件时调用
system()
,然后调用gnuplot。但是,这意味着你每次都应该改变文件名,但是我担心如果你这样做,它看起来就不正确了,因为你每次都发送少量的数据。
http://www.gnu.org/software/libc/manual/html_node/System-Calls.html
我从来没有使用过gnuplot,但是如果你看一下这个页面(http://gnuplot-tricks.blogspot.com/),你可能会发现一些技巧,可以使它工作得很好。
但是,我认为,除非您打算自己绘制所有内容,并跳过gnuplot,否则您可能只需要等待,就像您一样。
你可能会发现gnuplot的C接口可以帮助你:
http://ndevilla.free.fr/gnuplot/
mrwjdhj34#
pbPlots非常易于使用,可以与所有C编译器一起使用。
从github page下载pbPlots.c/h和supportLib.c/h并将它们包含在构建中。
这里是一个完整的例子,将产生一个绘图在PNG文件。
还有很多可用的选项,这些都在github页面上描述。
gstyhher5#
有一个广泛的库称为DISLIN用于科学目的。即使在Fortran语言可用。
您可以在官方网站上查看示例。
您可以在DISLIN Homepage中免费获取
gijlo24d6#
我稍微看了一下周围的人,看看他们在gnuplot中对实时绘图做了什么,发现了这个:
http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html
有一个小的Perl脚本可以驱动绘图,你只需要输入你的信息。
由于要将数据写入文件,因此可能需要
tail -f yourdata.dat
并将其通过管道传输到实时绘图仪中。另外,由于您使用的是stdio文件调用,因此需要定期刷新(通过调用
fflush
)显然你的模拟会在后台或其他shell中运行,这样你就可以在任何时候脱离绘图而不中断模拟。
希望对你有用。
bpzcxfmw7#
使用C编程语言逐步解决绘图问题:
步骤1要求:1. Windows 10/11 64 bit 2. Install eclipse IDE(CDT或科学计算)3.使用MSYS 2安装MSYS 2 4. Install
mingw64
c编译器所需的组件,并将其二进制路径添加到Windows环境变量5.使用MSYS 2安装mathgl
库:第2步Crete eclipse project witch includes required
mathgl
required library.将所需的库添加到项目:
右键点击项目-〉展开C/C++ Build -〉Setting -〉展开MinGW C Linker(如果没有展开)-〉Libraries -〉Libraries(-l)-〉add...
这里必须添加
mgl2
和mgl2-fltk
:步骤3(final)编写代码绘制:在project下创建一个.c文件,并将下面的代码写入其中。
生成此代码后,您将发现debug文件夹中包含一个可执行文件。