gpt4 book ai didi

c++ - 即使重读后 Gnuplot 也无法正确更新

转载 作者:行者123 更新时间:2023-12-02 10:30:53 25 4
gpt4 key购买 nike

我正在尝试通过 gnuplot-iostream 绘制两个在 gnuplot 中平移和旋转的 3D 对象。在我的 .cpp 文件中,我有一个进行 100 次迭代的 for 循环。对于每次迭代,我希望绘制更改的 .dat 文件,所以我希望我的情节能够移动。

我已将我的 gnuplot 设置为持续存在,因此绘图应该通过 100 次迭代“动画化”,但由于某种原因,我得到了一个非常错误的结果,移动了两次(首先是不完整的数字版本,然后第二个反射(reflect)了最后一个.dat 文件中写入的数据,其中包含完整的数字。它会在其余迭代中保留该图)。

除了这两个之外,我根本看不到这些数字旋转/平移,而且它们也是很大的跳跃。我应该能够看到我的身影在空间中缓慢地穿行,但不知怎的,它从中间走到了尽头。每次我尝试关闭 gnuplot 窗口时,它都会自动打开一个新窗口,保持相同的情节。然后我需要一遍又一遍地关闭它们,直到没有更多的东西可以关闭。

在此之前,我有一个动画,我决定将所有数据写入文件并以这种方式绘制。但问题是它会绘制我的人物从头到尾的每一次平移/旋转,所以它看起来就像一个巨大的颜色 Blob 。另一个问题是我希望绘图与我的程序中正在执行的特定数学相对应,因此保存最后的绘图在视觉上没有用处。

目前我有一些看起来像:

int main()
{
Gnuplot gp;
for(int i = 0; 1 < 100; i++)
{
// open 3dfigure.dat file
// bunch of math
...
for(int j = 0; j < vector.size(); j++)
{
// more math
for(int k = 0; vector(j).size(); k++)
{
// write or overwrite 3dfigure.dat file
}
}
gp<<"splot [-6:6] [-2:2] [-1:4] '3dfigure.dat' u 1:2:3 w lines \n";
gp<<"pause 1 \n";
gp<<"reread \n";
// close 3dfigure.dat file
}
}

我已经尝试了各种关于将绘图代码放在哪里的安排,我要么得到相同外观图的 100 次迭代,要么得到一个空图。我认为我安排代码的方式存在缺陷(起初我认为我正在重新阅读没有任何更改,所以我会在 splot 之前重新阅读......并没有真正起作用!)

最佳答案

所以为了让我在同一个窗口上绘制我的两个图形的旋转和平移,我必须完全改变我的方法。事实证明,我什至不需要使用整个 Gnuplot gp(gnuplot -persist),也不需要刷新、重新绘制、重新读取、清除等。

我使用 send1d 来输入我的数据,而不是不断地写入文件。我做了两个容器来保存我的人物的脸,两个都是元组的 vector 。例如:

std::vector<std::tuple<double,double,double>> faces1;
std::vector<std::tuple<double,double,double>> faces2;

对于每次迭代,我将面插入这些容器(即 faces1.push_back(std::make_tuple(x,y,z)); )
我通过做ff来绘制这个:
gp<<"splot '-' u 1:2:3 w lines, '-' u 1:2:3 w lines \n"; 
gp.send1d(face1);
gp<<"pause 0.5 \n";
gp.send1d(face2);
faces1.clear();
faces2.clear();

这对我来说很有效,因为我的绘图已经发生在 for 循环中,所以它一定会更新。 I对于每次迭代,我们从两个空 vector 开始填充新数据。不清除 vector 将保留所有先前的数据,您最终将绘制每个旋转/平移。

不确定是否还有其他更有效的方法,但这绝对解决了我的问题。我希望这对将来处理类似事情的人有所帮助。

关于c++ - 即使重读后 Gnuplot 也无法正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62313780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com