绘制球体with pm3d
效果很好。但是,当我想补偿时,会得到一些我不会理解的伪影。有什么想法为什么通过加一些数字来移动坐标时会在球体中出现“黑洞”?用gnuplot 5.2.8创建
码:
### plotting artifact with splot and pm3d
reset session
set view equal xyz
set view 45,45, 2
unset tics
unset colorbox
unset key
set margins 0,0,0,0
unset border
set style fill solid 1.0 noborder
set pm3d depthorder noborder
set pm3d lighting specular 0.5
# Create a sphere prototype dataset
set parametric
set isosamples 25
set samples 25
set urange [-pi/2:pi/2]
set vrange [0:2*pi]
Radius = 1
set table $Sphere
splot Radius*cos(u)*cos(v), Radius*cos(u)*sin(v), Radius*sin(u)
unset table
unset parametric
set palette defined (0 "#ff0000", 1 "#ff0000")
set view 153, 90
splot $Sphere u 1:2:3 w pm3d
pause -1 "Press OK to see the next plot"
splot $Sphere u ($1+1.0):($2+2.0):($3+3.0) w pm3d
### end of code
结果:
有偏移量:
问题出在照明模型代码中。它使用叉积(v1-v0)x(v2-v0)计算pm3d曲面的每个四边形小平面的曲面法线。在这种情况下,接触球体“极点”的四边形退化,因为四个顶点中的两个恰好位于极点上,仅剩下一个三角形。取决于两个顶点中的哪个顶点,法线变为不确定,并且照明计算失败,返回0 =黑色。这是一个可修复的错误,因为选择不同的顶点仍然可以计算法线。
解决方法:限制参数变量“ u”的范围,以使四边形不能完全到达极点:
epsilon=0.0001
set urange [epsilon - pi/2 : pi/2 - epsilon]
对于它的价值,另一个解决方法是set pm3d interpolation 3,3
。我不确定为什么会起作用,但是如果在绘制非现场生成的数据集时出现相同的问题,这可能会很有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句