在一组球之间的间隙中找到最大球的算法

时间:2019-02-22 10:17:33

标签: algorithm math

我有一组具有已知中心和半径的不相交的球,我想在这些球之间的间隙中找到最大的球。

目前,我的方法是“微调和凸起”方法,其中,我在所有球体中心附近的空隙中选取一个点P,然后找到最大中心为P的最大球。球中心从P到第二位置P'的小步距随机走动,并检查半径为P'的球是否与其他球体相交,如果不存在相交,则球体长大直到碰到一个球体,否则中心体会走再次,并重复。

这种方法非常耗时,我想知道是否有更好的方法来解决该问题。我已经在线搜索过,唯一相关的讨论是关于在点/多边形/多面体之间找到最大内切圆/球。

1 个答案:

答案 0 :(得分:0)

如果无法通过“轻推”使球体变大,则它必须与至少4个其他球体相切。

给出4个球体,只有一个球体与所有球体相切。 (位置和半径是4个未知数,由到给定球体的4个距离方程确定)

因此,请尝试4个球体的所有组合。对于每种组合,请找到切线球,然后查看其是否与其他任何球相交。

这个想法将您的问题分解为有限的可能性。如果您有很多球体,那么简单的算法就需要O(n ^ 5),但这仍然很长。您可以按照@YvesDaoust的建议使用3D Voronoi图大大加快这一过程。