有没有办法使用Gnuplot 5.0绘制带有filledcurves
的洞的多边形?
以下是我的测试数据:
# Outer ring
0 -2
-2 0
0 2
2 0
0 -2
# Inner ring
-0.5 0.5
-0.5 -0.5
0.5 -0.5
0.5 0.5
-0.5 0.5
结果如下:
我知道我可以重新排序顶点,以便隐藏外环和内环之间的连接线(实际上是多边形边界)。但我会处理机器生成的数据,我宁愿最小化数据预处理量。
在其他一些绘图程序中,我们可以通过将缠绕规则更改为even-odd来在多边形内部绘制孔。但我没有在gnuplot中找到这样的选项。
最后,我不能只用白色绘制“洞”,因为在我的应用程序中我有几种形状可以绘制,而且我想在“洞”后面看到其他形状。
答案 0 :(得分:0)
为什么不在形状顶部绘制白色的孔? 将您的日期分成
# shape.txt
0 -2
-2 0
0 2
2 0
0 -2
和
# hole.txt
-0.5 0.5
-0.5 -0.5
0.5 -0.5
0.5 0.5
-0.5 0.5
然后使用
plot "shape.txt" u 1:2 w filledcurves, 'hole.txt' u 1:2 w filledcurves lc 'white'
答案 1 :(得分:0)
以下解决方案执行您在问题中已经提到的内容:它以这种方式重新排列内部多边形的点,使外部多边形的端点和内部多边形的起点具有最小距离(因此没有线穿过内部多边形)。它会自动与 gnuplot 一起,所以这对你来说仍然是一个可以接受的解决方案。
假设:
程序:
idx0
中)x0,y0
)(行索引存储在idx1
中)$Hollow
中:首先是外部原样,然后是内部从 idx1
开始到结束,然后是内部从 (idx0+2
) 开始到 { {1}}。在下面的示例中,首先绘制红线以说明中心的空多边形。使用 gnuplot 5.0.0 测试。 对于填充曲线中的多个孔,您可能需要使用一个相当通用但相当冗长的解决方案来检查 gnuplot: How to draw a filled area with hole?。
代码:
idx1
结果:
只是为了更好地理解### draw hollow polygon
reset session
$Data <<EOD
# Outer ring
0 -2
-2 0
0 2
2 0
0 -2
# Inner ring
-0.5 0.5
-0.5 -0.5
0.5 -0.5
0.5 0.5
-0.5 0.5
EOD
Distance(x0,y0,x1,y1) = sqrt((x1-x0)**2 + (y1-y0)**2)
GetIdxs(colX,colY) = LastOuter==1 ? ( d1=Distance(x0,y0,column(colX),column(colY)), \
d0==d0 ? (d1<dmin ? (idx1=column(0), dmin=d1) : 0) : \
(idx1=column(0),dmin=d1), d0=d1, LastOuter) : \
column(0)==0 ? (d0=d1=dmin=NaN,x0=column(colX),y0=column(colY)) : \
column(colX)==x0 && column(colY)==y0 && LastOuter==0 ? \
(idx0=column(0),x0=column(colX),y0=column(colY),LastOuter=1 ) \
: LastOuter
set table $Dummy
plot LastOuter=0 $Data u 1:2:(GetIdxs(1,2)):(d1) w table
set table $Hollow
plot $Data u 1:2 every ::::idx0 w table
plot $Data u 1:2 every ::idx1 w table
plot $Data u 1:2 every ::idx0+2::idx1 w table
unset table
plot for [i=-5:5] -x+i/5.lw 2 lc "red" notitle, \
$Hollow u 1:2 w filledcurves lc 1
### end of code
和$Dummy
的内容。
$Hollow
$Dummy
0 -2 -2 nan
-2 0 0 nan
0 2 0 nan
2 0 0 nan
0 -2 1 nan
-0.5 0.5 1 2.54951
-0.5 -0.5 1 1.58114
0.5 -0.5 1 1.58114
0.5 0.5 1 2.54951
-0.5 0.5 1 2.54951
$Hollow