我应该如何格式化.dat文件以便可以制作3D矢量图?

rom*_*ovs 7 c++ 3d field gnuplot vector

我正在为大学工作这个编程任务,我们必须编写一个c++程序来计算3D空间中某些线圈的磁场矢量.

我已经设法写了这个程序,我想我已经很好地工作了.

我想添加一个特殊的薄片(这是我的试卷,所以它必须特别好!):我不想绘制出矢量.

我习惯于gnuplotc++(通过管道)打电话,这就是我通常做的事情:

  1. 创建将数据写入.dat文件的输出流
  2. 打开一个gnuplot管道
  3. 使gnuplot绘制所有内容 .dat

由于我的数据一直是2D xy情节,我在这里很丢失.我的问题是:

  1. 如何格式化.dat文件(例如,我是否使用大括号对矢量组件进行分组?)
  2. 绘制3D矢量场的实际gnuplot命令是什么?

如果我可以.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

好吧,因为有人让我描述我如何管道(不知道这是否是正确的术语)gnuplot.这里是:

  1. 首先打开一个管道并调用它pipe:

    FILE *pipe = popen("gnuplot -persist 2>/dev/null", "w");
    
    Run Code Online (Sandbox Code Playgroud)
  2. 告诉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哪个是绝对必要的.它是执行命令的.

  3. 关闭管道:

    pclose(pipe);
    
    Run Code Online (Sandbox Code Playgroud)

<fstream>我相信必要的图书馆.

Dr *_*eco 6

我做了这个简单的例子,向您展示如何绘制矢量场.输出将是这样的图片:

在此输入图像描述

我用来绘制这个数据的例子是:

# 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