问题描述
|
我正在上大学的这项编程任务,我们必须编写一个
c++
程序来计算3D空间中某些线圈的磁场矢量。
我已经成功编写了该程序,并且我认为它运行得很好。
不过,我想添加一个特殊的命令(这是我的考试卷,因此必须特别好!):我不想将向量绘制出来。
我习惯从c++
(通过管道调用)中调用gnuplot
,这是我通常要做的:
创建将数据写入.dat
文件的输出流
打开一个gnuplot管道
使gnuplot绘制ѭ3的所有内容
由于我的数据一直是2D,x
和y
图,因此我在这里很迷失。我的问题是:
如何格式化.dat
文件(例如,我是否使用花括号对矢量分量进行分组?)
绘制3D矢量场的实际gnuplot命令是什么?
如果可以像这样格式化.dat
文件,那将很容易:
# Px Py Pz Bx By Bz
1 0 2 0.7 0.5 0.25 #<= example data line
... more data ...
当点vector10处的磁场矢量等于vector11时。这将很容易编程,真正的问题是:这样可以吗?以及如何在gnuplot中绘制它。 (哇,我猜过3次相同的问题)。
管道到gnuplot
好的,因为有人要我描述我如何将(不知道这是否是正确的术语)东西塞入gnuplot
。这里是:
首先打开管道,并将其命名为pipe
:
FILE *pipe = popen(\"gnuplot -persist 2>/dev/null\",\"w\");
告诉gnuplot
通过管道进行的操作:
fprintf(pipe,\"set term x11 enhanced \\n\");
fprintf(pipe,\"plot x^2 ti \'x^2\' with lines\\n\");
注意绝对必要的the17。它是执行命令的地方。
关闭管道:
pclose(pipe);
我相信必要的库称为ѭ19。
解决方法
我做了一个简单的示例,向您展示如何绘制矢量场。输出将如下图所示:
我用来绘制此图的数据示例是:
# 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
绘制它的命令是:
gnuplot> splot \"./data3d.dat\" with vectors
现在,您应该阅读官方手册第53页第44节(此处为pdf)。您可能会发现此站点也非常有用。
编辑:
该命令不符合您的描述:映射from (x,y,z) to (t,u,v)
。它实际上执行以下映射:mapping23ѭ。
干杯,
贝科