【问题标题】:Gnuplot: how to draw polygon/contour from its verticesGnuplot:如何从其顶点绘制多边形/轮廓
【发布时间】:2015-09-25 11:48:39
【问题描述】:

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

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

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

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

另外注意,数据文件/多边形不止一个,而是N个:data1.txt ....dataN.txt

我尝试了类似的方法,但没有奏效(文件数 =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 

我知道有多少多边形/文件(本 cae 中有 6 个),但我不知道每个文件中的列数;顶点的数量可以因多边形而异。

有什么想法吗?

【问题讨论】:

    标签: for-loop gnuplot polygon


    【解决方案1】:

    我的想法需要修改您的文件结构。对于每个迭代时间,都有一个包含多边形顶点的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
    

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 2019-11-24
      • 2014-05-21
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多