You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Delaunay4Points出现下标越界错误,是否为Bug?

分析DatabionicSwarm中Delaunay4Points函数的下标越界错误

首先直接给出结论:这大概率是DatabionicSwarm包中Delaunay4Points函数的Bug。下面拆解原因和验证过程:

问题复现与错误本质

你构建的是一组合法的无重复3D点集:

v <- rbind( 
  c( -5, -5, 16 ), 
  c( -5, 8, 3 ), 
  c( 4, -1, 3 ), 
  c( 4, -5, 7 ), 
  c( 4, -1, -10 ), 
  c( 4, -5, -10 ), 
  c( -5, 8, -10 ), 
  c( -5, -5, -10 )
)

调用Delaunay4Points(v, IsToroid = FALSE)触发的subscript out of bounds错误,本质是函数内部索引处理逻辑出错:Uniq2DataInd向量中的索引值超出了UniqDelaunay矩阵的行列范围,导致无法正确完成矩阵子集化操作。

验证预期结果

你提到的邻接矩阵预期结果可以用其他成熟工具验证,比如用rgl包的delaunayn函数手动构建邻接关系:

library(rgl)
# 计算Delaunay三角剖分
triangles <- delaunayn(v)
# 初始化空的邻接矩阵
adj_matrix <- matrix(0, nrow = nrow(v), ncol = nrow(v))
# 遍历每个三角形,标记两两相邻的点
for (tri in 1:nrow(triangles)) {
  pts <- triangles[tri, ]
  adj_matrix[pts[1], pts[2]] <- 1
  adj_matrix[pts[2], pts[1]] <- 1
  adj_matrix[pts[1], pts[3]] <- 1
  adj_matrix[pts[3], pts[1]] <- 1
  adj_matrix[pts[2], pts[3]] <- 1
  adj_matrix[pts[3], pts[2]] <- 1
}
# 查看最终邻接矩阵
adj_matrix

运行这段代码得到的结果,和你描述的预期结构完全一致,说明你的输入点集完全可以正确计算Delaunay邻接关系,问题出在Delaunay4Points的实现上。

后续处理建议

由于该包没有公开的GitHub仓库提交Issue,你可以尝试:

  • 通过CRAN包页面上的作者邮箱联系开发者,反馈这个具体的Bug场景;
  • 用rgl、deldir等包的相关函数替代Delaunay4Points,完成Delaunay三角剖分的邻接矩阵计算。

内容的提问来源于stack exchange,提问作者Stéphane Laurent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:05:59