gnuplot:添加偏移量时绘制 pm3d 工件
gnuplot: splot pm3d artifacts when adding offset
绘制球体 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.0):(+2.0):(+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
。我不确定为什么会这样,但如果在绘制不是当场生成的数据集时出现同样的问题,它可能会有用。
绘制球体 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.0):(+2.0):(+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
。我不确定为什么会这样,但如果在绘制不是当场生成的数据集时出现同样的问题,它可能会有用。