我正在使用gnuplot绘制一个锥体,箭头指向锥体的对称轴向上。唯一的问题是我无法弄清楚如何正确地将箭头装入图片的3D透视图中。默认情况下,箭头显示在整个圆锥体后面。如果我在箭头上添加“前”选项,它将显示在整个圆锥的前面。但是,从透视角度来看,箭头应位于锥体后半部分的前方,并位于锥体前半部分的后面。
显而易见的解决方案是将绘制圆锥体的功能分成两半,并使箭头在一条曲线的前面并在另一条曲线的后面。有没有办法做到这一点(即手动设置绘制曲线和其他对象的顺序)?如果没有,有没有人有一个很好的解决方法? (我能想到的唯一一个是用线条手动绘制箭头,但如果可能的话,我想避免使用它。)
这是一个最小的工作示例。我正在使用精细网格,以便清晰可见效果。
set arrow 1 from 0,0,0 to 0,0,1 lw 2
set isosamples 100
set xrange [-1:1]
set yrange [-1:1]
set zrange [-1:1]
set zrange [0:1]
splot sqrt(x**2+y**2)
要查看简单地使用“front”选项作为修复方法有什么问题,请将第一行替换为:
set arrow 1 from 0,0,0 to 0,0,1 lw 2 front
提前感谢您的帮助!
编辑:我在发帖后意识到这可以通过多色时间来完成。但似乎应该有一个更好的解决方案,所以如果你想到一个,请告诉我。
答案 0 :(得分:1)
要隐藏部分线条,通常可以使用set hidden3d
,但这不会影响使用set arrow
放置的箭头。但是它会影响使用vectors
绘图样式绘制的箭头:
set hidden3d
splot sqrt(x**2+y**2), '< echo "0 0 0 0 0 1"' with vectors
但是现在,箭头的一部分完全隐藏在表面之后,并且不会在表面线之间闪耀。为此,您可以另外设置带有set arrow back ...
的第二个箭头:
set isosamples 100
set xrange [-1:1]
set yrange [-1:1]
set zrange [-1:1]
set zrange [0:1]
set hidden3d nooffset
set style arrow 1 lw 2 head filled size 0.1,20,70
unset key
set arrow nohead from 0,0,0 to 0,0,1 as 1 back
splot sqrt(x**2+y**2), '< echo "0 0 0 0 0 1"' with vectors arrowstyle 1
这给出了(用4.6.4):