【问题标题】:Set maximum length for generating Delaunay graph in R设置在 R 中生成 Delaunay 图的最大长度
【发布时间】:2020-07-30 10:15:19
【问题描述】:

我试图使用 spatstat 函数“delaunay”在 R 中生成 Delaunay 三角剖分。但是,我检查了文档,似乎没有设置最大长度的参数。 我注意到这个帖子: How to set maximum length of triangle side in Delaunay triangulation in R? 这似乎与我想要的一样,但由于我的点模式很大,所以我更喜欢简单快捷的解决方案。谢谢!

这是我的代码:

pts <- data.frame(readMat(paste('./TMA - Coordinates/HE_Rescaled_Coords/', core, 
'/HE.mat', sep = '')))
colnames(pts) <- c('x', 'y')
pts_ppp <- ppp(pts$x, pts$y, owin(poly = Region_HE))
delaunay_ppp <- delaunay(pts_ppp)  

我也对使用其他软件包中的其他功能的解决方案持开放态度。只要速度快。

这是区域数据:https://livejohnshopkins-my.sharepoint.com/:u:/g/personal/hmi1_jh_edu/EU5YeWiKzXlIohj7WIbfE_kB52Nbh2soXSNdHwQVukYnLA?e=t9tCf9

这里是积分数据:https://livejohnshopkins-my.sharepoint.com/:u:/g/personal/hmi1_jh_edu/EaIuRF913rtBpg3VHvlp6TkB1FUomrgUc3eeUeHbVPJ50g?e=cwg1os

【问题讨论】:

    标签: r delaunay spatstat


    【解决方案1】:

    Delaunay 三角剖分是一种数学定义的三角剖分,不涉及最大分段长度的概念。如果要限制三角剖分中线段的最大长度,则不再是Delaunay三角剖分,计算Delaunay三角剖分的算法不适用。

    当你对段长度施加限制时,你必须指定你想要发生的事情。算法应该只删除太长的边吗?删除边缘太长的三角形?如果您删除内容,则结果不再是原始点的三角剖分。是否要生成不同的三角剖分?

    如果X 是您的点模式,那么

    Dtess <- delaunay(X)
    Dnet <- delaunayNetwork(X)
    

    将 Delaunay 三角剖分作为镶嵌 Dtess 和网络 Dnet。 从Dnet 中删除比lmax 长的边:

    len <- lengths_psp(as.psp(Dnet))
    Net <- thinNetwork(Dnet, retainedges = (len <= lmax))
    

    Dtess 中删除至少一条边长于lmax 的三角形:

    hypotenuse <- function(p) { max(lengths_psp(edges(p))) }
    h <- sapply(tiles(Dtess), hypotenuse)
    Tess <- Dtess[h <= lmax]
    

    【讨论】:

    • 感谢您的解释!你的代码正是我想要的。
    猜你喜欢
    • 2013-07-14
    • 2015-02-16
    • 2011-02-01
    • 2012-09-27
    • 2013-11-02
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多