首页 > 解决方案 > 使用 gnuplot 从离散数据中绘制平滑球体

问题描述

我有从 python 代码生成的数据,如下所示:

u, v = np.mgrid[0:2*np.pi:180*1j, 0:np.pi:90*1j]
X = np.cos(u)*np.sin(v)
Y = np.sin(u)*np.sin(v)
Z = np.cos(v)

这被写入一个文件tmp.dat,我尝试在 gnuplot 中绘制它:

set pm3d
set palette
set hidden
splot "tmp.dat" using 1:2:3 with pm3d

然而,这给了我:在此处输入图像描述 它大致在我想要的附近,但我想要一个光滑的球体,而不是这个。(我的真实数据也是如此;我希望在封闭的表面上具有透明度。)我尝试添加set dgrid3d 50,50尝试和插值,但是,我实际上并不明白我从中得到了什么:在此处输入图像描述 任何帮助或建议将不胜感激。将数据更改为参数(使用uv扫描数据)是一种选择,但是,我不确定如何做到这一点 - 当我尝试时,结果是一样的。

标签: gnuplot

解决方案


不是一个完整的答案,但您的部分问题是“set hidden3d”在这里不可用。Gnuplot 有两个独立的子系统来表示表面。其中之一,由“set hidden3d”控制,跟踪边界线段并可以移除被遮挡的部分。另一个是 pm3d,它使用实体填充四边形而不是边界线段。pm3d 绘图没有删除被遮挡的四边形的选项,但您可以通过对它们进行深度排序来获得类似的效果。相关命令是

set pm3d depthorder

如果单个四边形近似为正方形,则此方法效果相当好,但对于细长的四边形会产生不好的结果,因为刻面的两端相对于相邻刻面可能具有冲突的深度。


推荐阅读