rom*_*ovs 7 c++ 3d field gnuplot vector
我正在为大学工作这个编程任务,我们必须编写一个c++程序来计算3D空间中某些线圈的磁场矢量.
我已经设法写了这个程序,我想我已经很好地工作了.
我想添加一个特殊的薄片(这是我的试卷,所以它必须特别好!):我不想绘制出矢量.
我习惯于gnuplot从c++(通过管道)打电话,这就是我通常做的事情:
.dat文件的输出流.dat由于我的数据一直是2D x和y情节,我在这里很丢失.我的问题是:
.dat文件(例如,我是否使用大括号对矢量组件进行分组?)如果我可以.dat像这样格式化文件很容易:
# Px Py Pz Bx By Bz
1 0 2 0.7 0.5 0.25 #<= example data line
... more data ...
Run Code Online (Sandbox Code Playgroud)
当点中的磁场矢量P=(1,0,2)等于矢量时B=(0.7,0.5,0.25).这很容易编程,真正的问题是:这样做吗?以及如何在gnuplot中绘制它.(哇,我猜了3次问同样的问题).
好吧,因为有人让我描述我如何管道(不知道这是否是正确的术语)gnuplot.这里是:
首先打开一个管道并调用它pipe:
FILE *pipe = popen("gnuplot -persist 2>/dev/null", "w");
Run Code Online (Sandbox Code Playgroud)告诉gnuplot管道要做什么:
fprintf(pipe, "set term x11 enhanced \n");
fprintf(pipe, "plot x^2 ti 'x^2' with lines\n");
Run Code Online (Sandbox Code Playgroud)
注意\n哪个是绝对必要的.它是执行命令的.
关闭管道:
pclose(pipe);
Run Code Online (Sandbox Code Playgroud)<fstream>我相信必要的图书馆.
我做了这个简单的例子,向您展示如何绘制矢量场.输出将是这样的图片:

我用来绘制这个数据的例子是:
# Px Py Pz Bx By Bz
0 0 0 0.8 0.8 0.45
0 0 1 0.5 0.7 0.35
0 0 2 0.7 0.5 0.25
0 1 0 0.65 0.65 0.50
0 1 1 0.6 0.6 0.3
0 1 2 0.45 0.45 0.20
1 0 0 0.5 0.7 0.35
1 0 1 0.75 0.75 0.4
1 0 2 0.85 0.85 0.25
1 1 0 0.90 0.85 0.23
1 1 1 0.95 0.86 0.20
1 1 2 0.98 0.88 0.13
2 0 0 0.73 0.83 0.43
2 0 1 0.53 0.73 0.33
2 0 2 0.73 0.53 0.23
2 1 0 0.68 0.68 0.52
2 1 1 0.63 0.57 0.23
2 1 2 0.48 0.42 0.22
Run Code Online (Sandbox Code Playgroud)
绘制它的命令是:
gnuplot> splot "./data3d.dat" with vectors
Run Code Online (Sandbox Code Playgroud)
现在你应该阅读官方手册第53页第44节(这里是pdf).您可能会发现此网站也非常有用.
编辑:
此命令不适合您的描述:映射from (x,y,z) to (t,u,v).它实际上是这种映射:from (X,Y,Z) to (X+dX,Y+dY,Z+dZ).
干杯,Beco