【问题标题】:gnuplot: splot pm3d artifacts when adding offsetgnuplot:添加偏移量时 splot pm3d 工件
【发布时间】:2020-08-06 20:24:07
【问题描述】:

绘制一个球体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    
    

结果:

带偏移量:

【问题讨论】:

  • 对不起,你是对的。在那种情况下,我不知道原因是什么。我将删除我的答案并考虑更多。
  • 我怀疑可能存在一些小数字和四舍五入的东西。 $Sphere 包含一些接近于零的极小数字,例如 +1e-17-1e-32。也许正因为如此,如果添加(相对)大的数字,则不会绘制最后的刻面,这会导致这个“黑洞”。但我仍然无法解释,也不知道如何解决。
  • 这似乎是光照模型的镜面反射组件中的一个故障。我将不得不进一步调查。
  • 解决方法:在生成球体时修剪参数参数u的限制。这可以防止到达两极的四边形完全退化:epsilon=0.0001; set urange [epsilon - pi/2 : pi/2 - epsilon]
  • 谢谢你,Ethan,这很有帮助。不再有“黑洞”。你想把这个作为答案吗?

标签: gnuplot


【解决方案1】:

问题出在光照模型代码中。它使用叉积 (v1-v0)x(v2-v0) 计算 pm3d 表面的每个四边形刻面的表面法线。在这种情况下,接触球体“极点”的四边形会退化,因为四个顶点中有两个正好位于极点上,只剩下一个三角形。根据两个顶点中的哪一个重合,法线变得未定义,光照计算退出,返回 0 = 黑色。所以这是一个可修复的错误,因为不同的顶点选择仍然允许计算法线。

解决方法:限制参数变量“u”的范围,使四边形不会完全到达两极:

 epsilon=0.0001
 set urange [epsilon - pi/2 : pi/2 - epsilon]

对于它的价值,另一个解决方法是set pm3d interpolation 3,3。我不确定为什么会这样,但如果在绘制不是现场生成的数据集时出现同样的问题,它可能会很有用。

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多