spatstat中MinkowskiSum()返回多组边界的原因及正确边界选择疑问
关于spatstat包中闵可夫斯基和边界的疑问解答
1. MinkowskiSum()为何返回多组边界,每组边界点分别对应什么?
spatstat中MinkowskiSum()(或%(+)%运算符)返回的多组边界,源于算法计算过程中的退化处理残留:
- 计算两个凸多边形的闵可夫斯基和时,算法会遍历两个多边形的所有边,按方向排序后合并同向边;若原多边形存在边方向重合、顶点共线等情况,会产生一些面积为0的退化边界环(比如由重合点组成的闭合环)。
- 这些额外的边界组并非有效几何边界,只是计算过程中未被自动清理的冗余片段,真正有效的是对应闵可夫斯基和外轮廓的那组边界。
2. 如何确定哪组边界点适用于绘制最终的闵可夫斯基和?
可以通过以下两种简单方法筛选正确边界:
- 计算边界多边形面积:对每个
bdry元素,用area.polygonal()计算其面积,面积最大的那组就是正确的外边界(退化环的面积为0或趋近于0)。示例代码:# 假设ply是闵可夫斯基和结果对象 bdry_areas <- sapply(ply$bdry, area.polygonal) correct_bdry_idx <- which.max(bdry_areas) correct_bdry <- ply$bdry[[correct_bdry_idx]] - 转换为标准多边形对象:使用
as.polygonal()函数将闵可夫斯基和对象转换为polygonal类型,该函数会自动过滤掉退化的内部边界,直接返回有效外边界。示例代码:correct_poly <- as.polygonal(ply) plot(correct_poly) # 直接绘制正确的闵可夫斯基和轮廓
内容的提问来源于stack exchange,提问作者stopro
相关产品推荐
相关产品推荐

