【问题标题】:Building adjacency matrix from delaunay triangle values从德劳内三角形值构建邻接矩阵
【发布时间】:2018-10-14 16:07:24
【问题描述】:

我有一个包含点的 3D 坐标的大型矩阵,我希望使用它们的 delaunay 三角剖分结果来获得它们的邻接矩阵。为了获得他们的 delaunay 三角测量值,我使用了 'geometry' 包。为了举个例子,我准备了以下代码:

values<-rnorm(12,mean = 10, 5)

mat<-matrix(values,ncol = 3)

dimnames(mat)<-list(c("asd","qwe","rty","poi"),c("x","y","z"))

require("geometry")

delaunaynMat<-delaunayn(mat)

但是,我找不到任何合适的函数来根据 delaunay 结果构建邻接矩阵。有什么想法吗?

【问题讨论】:

    标签: r geometry adjacency-matrix delaunay


    【解决方案1】:

    也许使用DatabionicSwarm 包

    > library(DatabionicSwarm)
    > Delaunay4Points(mat, IsToroid=FALSE)
      1 2 3 4
    1 0 1 1 1
    2 1 0 1 1
    3 1 1 0 0
    4 1 1 0 0
    

    或 wirh deldir(仅适用于 2D):

    > require(deldir) 
    Loading required package: deldir
    deldir 0.1-15
    > set.seed(42) 
    > x <- runif(6) 
    > y <- runif(6) 
    > dxy <- deldir(x,y) 
    > ind <- dxy$dirsgs[,5:6] 
    > adj <- matrix(0, length(x), length(y)) 
    > for (i in 1:nrow(ind)){ 
    +     adj[ind[i,1], ind[i,2]] <- 1 
    +     adj[ind[i,2], ind[i,1]] <- 1 
    + } 
    > adj 
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]    0    1    0    1    0    0
    [2,]    1    0    0    1    1    0
    [3,]    0    0    0    0    1    1
    [4,]    1    1    0    0    1    1
    [5,]    0    1    1    1    0    1
    [6,]    0    0    1    1    1    0
    

    编辑

    有些奇怪。我需要翻转 Delauny4Points 的矩阵以获得与deldir 一致的结果:

    set.seed(42) 
    x <- runif(6) 
    y <- runif(6) 
    dxy <- deldir(x,y) 
    ind <- dxy$delsgs[,5:6] 
    adj <- matrix(0, length(x), length(y)) 
    for (i in 1:nrow(ind)){ 
        adj[ind[i,1], ind[i,2]] <- 1 
        adj[ind[i,2], ind[i,1]] <- 1 
    } 
    adj
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]    0    1    0    1    0    1
    [2,]    1    0    1    1    1    0
    [3,]    0    1    0    0    1    1
    [4,]    1    1    0    0    1    1
    [5,]    0    1    1    1    0    1
    [6,]    1    0    1    1    1    0
    
    > Delaunay4Points(cbind(x,y), IsToroid=FALSE)[6:1,6:1] # <- look
      6 5 4 3 2 1
    6 0 1 0 1 0 1
    5 1 0 1 1 1 0
    4 0 1 0 0 1 1
    3 1 1 0 0 1 1
    2 0 1 1 1 0 1
    1 1 0 1 1 1 0
    

    【讨论】:

    猜你喜欢
    • 2013-01-22
    • 2015-08-29
    • 2021-08-24
    • 1970-01-01
    • 2012-05-06
    • 2012-04-27
    • 2018-01-20
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多