我有一个情况,如下图所示,需要我计算出一个区域内最大的圆形(空白区域)。在下面的例子中,黑色圆圈是固定的已知位置,我需要找到最大的区域(由橙色和绿色圆圈表示),它们不与黑色圆圈接触。在下面的例子中,橙色圆圈是最大的空白区域,这是我想要计算的区域。
我可以用蛮力法,选择一个位置并扩展圆形,直到它碰到黑点,然后记录圆的位置和半径(开放空间),但这将极其低效,需要迭代所有可能的位置。在这种情况下,有没有一种有效的方法来分析最大开放空间在哪里?请注意,该场地上的黑点最多为15个,但实际上可能会少得多。编辑:感谢Yves和所有其他评论者。根据答案和其他评论,有几点需要澄清。黑盒子是一个边界,因此任何定义的区域必须在黑盒子内部。黑色圆圈的半径已知且静态,但在这些目的下,它们可以缩小为点。最后,圆的近似是可以接受的。它将用于具有决定最佳区域误差范围的AI例程。因此,如果圆的半径或位置略有偏差,也不会有太大问题。
我目前正在研究沃罗诺伊方法,我想我理解了它,但现在尝试找到适合的算法是一个问题!我会测试并回复您。 编辑2:感谢Yves,我研究了Voronoi图,并使用了一个简单的方法循环遍历所有Voronoi顶点(以及它穿过边界框的点),并找到从该中心点开始不包含任何“黑色圆”的最大圆。对于一个相对较小的、有限的点集,我对这个实现感到满意。请参见下面的结果,显示空间中前3个空圆。