2013-11-22 183 views
1

我正在使用gnuplot绘制一个箭头,该箭头指向锥形的对称轴向上。唯一的问题是我无法弄清楚如何正确地将箭头放入图片的3D透视图中。默认情况下,箭头显示在整个锥体后面。如果我将“前”选项添加到箭头,它会显示在整个锥体的前面。但是,从视角来看,箭头应位于锥体后半部分的前方,并位于锥体前半部分的后方。在gnuplot的一条曲线前面和另一条曲线的前面绘制一个箭头

显而易见的解决方案是将绘制锥体的功能分成两部分,并使箭头位于一条曲线的前面并在另一条曲线的后面。有没有办法做到这一点(即,手动设置绘制曲线和其他对象的顺序)?如果没有,有没有人有一个很好的解决方法? (我唯一能想到的就是用线条手动绘制箭头,但如果可能的话,我想避免这样做。)

这是一个最小的工作示例。我正在使用细网格,以便可以清楚地看到效果。

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) 

,看看有什么不妥仅仅使用了“前”选项,修复,替换为第一行:

set arrow 1 from 0,0,0 to 0,0,1 lw 2 front 

在此先感谢您的帮助!

编辑:我发现后发布,这可以用多槽完成。但似乎应该有一个更好的解决方案,所以请让我知道,如果你想到一个。

回答

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):

enter image description here

+0

感谢您的帮助! – sasquires

+0

你能解释一下“回声部分”吗? – LCsa

+0

@LCsa这是一种在5.0之前的gnuplot版本中使用某种内嵌数据的方式,''调用shell,在其中执行'echo'以将单行作为数据发送到gnuplot。由于5.0可以使用数据块,请参阅http://stackoverflow.com/a/33064653/2604213 – Christoph