【问题标题】:concise way to generate ordered sets of line segment coordinates生成有序线段坐标集的简洁方法
【发布时间】:2023-03-10 17:04:02
【问题描述】:

我写了一个快速技巧来生成所有“细胞壁”端点的坐标,这些坐标是在整数坐标上的一个普通的旧正方形数组中。

dimx <- 4
dimy <- 5
xvert<-rep(1:(dimx+1),each=dimy)
yvert<-1:dimy
yvert<-rep(yvert,times=dimx+1)
vertwall<-cbind(xvert, xvert,yvert,yvert+1)

水平墙壁也是如此。感觉就像我刚刚重新发明了一些基本功能,所以:更快、更好、更清洁?

编辑:考虑一个单元格网格。左下角单元格的两个感兴趣的墙具有坐标 x,y 对 (1,1),(1,2) 和 (1,1),(2,1) 。类似于固态物理学中晶体晶胞的定义,这就是所有需要的,因为“向上”的下一个晶胞具有壁 (1,2),(1,3) 和 (1,2),(2, 2)等等。因此,在我的样本中重复“xvert”数据的原因。

【问题讨论】:

    标签: r combinations


    【解决方案1】:

    我不确定你想做什么(你的列名重复,这很混乱)。你可以试试这个,例如:

    df = expand.grid( yvert= seq_len(dimy),xver= seq_len(dimy))
    transform(df,xvert1=xvert,yvert1=yvert+1)
    

    为了完整起见添加了 CGW:生成水平和垂直墙:

    df = expand.grid( xvert= seq_len(dimx),yvert= seq_len(dimy))
    transform(df,xvert1=xvert,yvert1=yvert+1) ->dfv
    df2 <- expand.grid(yvert= seq_len(dimy), xvert= seq_len(dimx))
    transform(df2,yvert1=yvert,xvert1=xvert+1) ->dfh
    #  make x,y same order in both arrays
    dfh[] <- dfh[,c(2,1,4,3)]
    

    【讨论】:

      【解决方案2】:

      expand.grid 函数创建数组的笛卡尔积,它提供了您需要做的大部分事情。

      expand.grid(x=1:5,y=1:5)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        • 2010-09-27
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多