You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:48:23