Gnuplot绘制实心彩色球体及表面点:点被遮挡问题求助
解决Gnuplot中球体遮挡外部点的问题
我来帮你搞定这个gnuplot里的遮挡问题——你遇到的核心问题是set pm3d depthorder只对pm3d自身的曲面生效,不会自动让后续绘制的点优先显示,哪怕这些点实际在球体外。下面给你两种实用的解决方案:
方案一:强制点显示在最前方(简单直接)
给点的绘图选项加上front属性,就能让所有点始终显示在球体上方,完全不受遮挡影响。修改后的代码如下:
set term wxt set view equal xyz set parametric set urange [-pi/2:pi/2] set vrange [0:2*pi] set isosamples 20,20 set palette model RGB functions 1,0,0 set pm3d depthorder R=0.9 splot R*cos(u)*cos(v),R*cos(u)*sin(v),R*sin(u) w pm3d,\ "-" w p pt 7 pointsize 0.5 lc 0 front # 这里添加front属性 1 0 0 0 1 0 0 0 1 e pause -1
方案二:启用全局深度排序(更贴合真实3D遮挡)
如果你的gnuplot版本比较新(大概5.2及以上),可以用set depthorder all命令让所有绘图元素(包括pm3d曲面和点)都参与深度计算,这样gnuplot会自动判断哪些点在球体前面,哪些在后面,既保留真实的遮挡逻辑,又不会让球外的点被错误挡住:
set term wxt set view equal xyz set parametric set urange [-pi/2:pi/2] set vrange [0:2*pi] set isosamples 20,20 set palette model RGB functions 1,0,0 set pm3d depthorder set depthorder all # 开启全局深度排序 R=0.9 splot R*cos(u)*cos(v),R*cos(u)*sin(v),R*sin(u) w pm3d,\ "-" w p pt 7 pointsize 0.5 lc 0 1 0 0 0 1 0 0 0 1 e pause -1
另外补充一下,如果你想同时保留球体的内部遮挡效果,还可以配合set hidden3d命令,它会让gnuplot正确处理3D物体的前后遮挡关系,和上面的方案结合使用效果更好。
内容的提问来源于stack exchange,提问作者rehctawrats
相关产品推荐
相关产品推荐

