C++ 我应该如何格式化我的.dat文件,以便制作三维矢量图?

C++ 我应该如何格式化我的.dat文件,以便制作三维矢量图?,c++,vector,3d,field,gnuplot,C++,Vector,3d,Field,Gnuplot,我正在为大学做这个编程任务,我们必须编写一个c++程序,计算三维空间中某些线圈的磁场矢量 我已经成功地编写了这个程序,我想我已经把它运行得很好了 不过我想加上一个特别的东西(这是我的试卷,所以必须特别好!):我不想画出向量 我习惯于从c++(通过管道)调用gnuplot,这就是我通常做的: 创建将数据写入.dat文件的输出流 打开gnuplot管道 使gnuplot绘制.dat 因为我的数据一直是2D,x和y绘图,所以我在这里很迷茫。我的问题是: 如何格式化.dat文件(例如,是否使用大括号对向

我正在为大学做这个编程任务,我们必须编写一个
c++
程序,计算三维空间中某些线圈的磁场矢量

我已经成功地编写了这个程序,我想我已经把它运行得很好了

不过我想加上一个特别的东西(这是我的试卷,所以必须特别好!):我不想画出向量

我习惯于从
c++
(通过管道)调用
gnuplot
,这就是我通常做的:

  • 创建将数据写入
    .dat
    文件的输出流
  • 打开gnuplot管道
  • 使gnuplot绘制
    .dat
  • 因为我的数据一直是2D,
    x
    y
    绘图,所以我在这里很迷茫。我的问题是:

  • 如何格式化
    .dat
    文件(例如,是否使用大括号对向量组件进行分组?)
  • 绘制三维矢量场的实际gnuplot命令是什么
  • 如果我能像这样格式化
    .dat
    文件,那就很容易了:

    # Px    Py    Pz    Bx    By    Bz
      1     0     2     0.7   0.5   0.25 #<= example data line
      ... more data ...
    
  • 告诉
    gnuplot
    通过管道做什么:

    fprintf(pipe, "set term x11 enhanced \n");
    fprintf(pipe, "plot x^2 ti 'x^2' with lines\n");
    
    pclose(pipe);
    
    请注意
    \n
    ,这是绝对必要的。它是执行命令的工具

  • 关闭管道:

    fprintf(pipe, "set term x11 enhanced \n");
    fprintf(pipe, "plot x^2 ti 'x^2' with lines\n");
    
    pclose(pipe);
    

  • 我相信必要的库叫做

    我制作了这个简单的示例,向您展示如何绘制向量场。输出类似于下图:

    我用于绘制此图的数据示例是:

    # 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
    
    现在,您应该阅读的第44节,第53页(和这里的)。你可能会发现这也很有用

    编辑:

    此命令不适合您的描述:将
    从(x,y,z)映射到(t,u,v)
    。它实际上是这样映射的:
    从(X,Y,Z)到(X+dX,Y+dY,Z+dZ)

    干杯,
    因为我对您在2D中调用gnuplot的“管道”方式非常感兴趣。你能给出一段简短的代码吗?谢谢哦非常感谢您提供管道代码。我肯定会在某处使用它。:)