Gnuplot:如何从顶点绘制多边形/轮廓

时间:2015-09-25 11:48:39

标签: for-loop gnuplot polygon

我的data.txt文件包含形成多边形线段的点的2D坐标。这些坐标随着时间的推移而发展。该文件的结构如下:

itr    nbr_pts   p1.x p1.y ...... pk.x pk.y
(itr+1) ..........
.....

其中pk是多边形的第k个点/顶点,nb_pts是数字顶点。

我的问题是如何在某个迭代(行)处从顶点(p1,p2,... pk)绘制2D多边形?

另外,请注意,不仅有一个数据文件/多边形而且还有N个:data1.txt .... dataN.txt

我尝试了类似的东西,但没有用(Nbr of files = 6)

N = 6 
set multiplot
plot for [i=0:N-1]  polygon_i = sprintf("%s/data%d.dat",filename, i)  polygon_i val=$2 for [j=1:$2] u (j+1):(j+1+1)  w lines 

我知道有多少个polygones /文件(这个cae中有6个),但我对每个文件中的列数没有先验知识;顶点的数量可以从多边形到另一个不同。

请问好吗?

1 个答案:

答案 0 :(得分:0)

我的想法需要修改文件结构。对于每个迭代时间,都有一个包含多边形顶点的xy坐标的块:

# file: data1.txt

# itr 0
0 0
1 1
1 2
0 0


# itr 1
1 3
2 1
0 1
1 2
1 3


# itr 2
3 1
2 1
0 0
3 1

请注意,每个块由两个空行分隔。对于迭代0(块0或itr 0),存在具有三个顶点的多边形,itr 1具有四个顶点,itr 2具有三个顶点。要获得闭合曲线,需要指定终点,例如itr 1我将点1 3两次。

对于此文件,我们可以将迭代iter处的多边形绘制为

iter = 1   # select block 1, or itr 1
plot "data1.txt" index iter w lp ps 2 pt 7 

如果您有多个文件,请尝试

# option 1
nbr  = 6      # number of files
iter = 1      # select block 1, or itr 1

plot for [i=1:nbr] "data".i.".txt" index iter w lp ps 2 pt 7 title "".i

#option 2
files = system("ls data*.txt")   # get all datafiles in folder
iter = 1                         # select block 1, or itr 1

plot for [data in files] data index iter w lp ps 2 pt 7 title data