如何在具有恒定半径的不相交圆的平面中覆盖一组圆?

How to cover a set of circles in a plane with disjoint circles of constant radius?

提问人:John 提问时间:5/9/2019 最后编辑:saastnJohn 更新时间:11/20/2020 访问量:274

问:

因此,您有一个给定尺寸的图纸/区域,并且该区域内有孔(给出了它们的中心点(x,y)和半径)。问题是你需要用补丁覆盖这些孔。这些圆形斑块的半径是固定的(即:半径为5),不允许相互重叠(但可以接触)。你可以随心所欲地使用,目标不是找到最佳数量,而是看看是否有可能覆盖每一个洞。

我已经用 KD 树解决了一个类似的问题,但由于这个问题中孔的 3D 维度性质,我不确定如何处理它。只是在寻找正确方向的指针,而不是编码的解决方案:)

算法 与语言无关 数学优化 计算几何

评论

0赞 Alfe 5/9/2019
这确实是一个非常有趣的问题!但请注意,您目前提出的问题不是 StackOverflow 的正确问题。“指向正确方向的指针”并不是 SO 的意义所在。在这里,你可以陈述一个明确定义的问题,它必须具有某种性质,这样它才能有一个清晰而正确的答案。您的问题属于“主要基于意见”或类似问题。因此,如果它被关闭,请不要太惊讶。无论如何祝你好运:-)
0赞 m.raynal 5/9/2019
确实非常有趣的问题,它可能会在计算机科学堆栈交换中受到更多关注。但是你说的孔的 3D 性质是什么意思?
1赞 John 5/9/2019
@m.raynal 上一次我使用 KD 树时,我正在处理点 (x,y)。但是对于这个问题,我将同时拥有 x,y 和半径,因为我的数据集是圆(各种大小)而不是点。不确定它是否使它成为“3D”,但似乎比标准 x,y 点更难分类为空间分部树:)
0赞 SaiBot 5/9/2019
我什至不确定这个问题如何用点而不是圆来处理。此外,我看不出 KD 树如何帮助解决这个问题。我想如果你能简要解释一下这个原始解决方案是如何工作的,那将会有所帮助。
1赞 5/13/2019
IMO 意见,您需要先找到几何解,然后再关心效率和加速度数据结构,例如 kD 树。我也认为这是一个可怕的问题。

答:

1赞 Ripi2 5/10/2019 #1

根据贴片和孔的大小,可能没有解决方案。

具有最紧凑的补丁阵列的解决方案:

enter image description here


没有解决方案,因为孔比补丁大,这允许未覆盖的区域:

enter image description here


没有解决方案,因为孔太近了:

enter image description here


对于一般结构,您从以孔为中心的补丁开始。然后根据需要平移和旋转(围绕连续贴片的中心)贴片:

enter image description here

评论

0赞 John 5/10/2019
干杯。这是否也适用于用单个补丁覆盖多个孔?假设每个孔的半径为 1-3,而面片的半径为 5?
1赞 saastn 5/13/2019 #2

您可能正在寻找一个分析性或至少一个确定性的解决方案。但恐怕有一个太复杂了。另一方面,像 EAs 这样的元启发式方法由于其随机性而可以应对此类问题。当您决定采用这种方法时,您必须将问题更改为优化问题

我尝试使用基本形式的 DE 算法来解决这个问题。为了定义一个优化问题,我假设一个解向量是一个浮点变量数组,其中是孔的数量。此数组表示面片的坐标,因为最多需要面片来覆盖孔。2*NNXYNN

成本函数(最小化所需的)定义如下:

Find closest patch to each hole
Find A1 as sum of uncovered areas of holes by their closest patchs
Find A2 as sum of intersection areas of active(!) patches
return max(A1, A2)

在此函数中,活动贴片是最接近至少一个孔的贴片。这个定义被添加到问题中,以涵盖您在对 Ripi2 答案的评论中提到的情况(当一个补丁覆盖两个孔时,所以还有另一个补丁是无用的)。为了更具描述性,让我们假设这个补丁不是最接近任何孔的补丁。 是离这个补丁最近的孔,但它最近的补丁是 。因此,我们可以肯定地说,和的交集面积小于或等于 和 的交面积。由于它最近的孔是正确的,所以所有其他孔都是一样的,所以让我们假设它不存在!P1H1P2H1P1H1P2

这是一个示例:

enter image description here

请记住,这些算法永远无法保证找到全局最优,但是,它们会给出一组次优解。