将 3D 点分组为给定半径的最少数量的球体

问题描述 投票:0回答:1

我有一组 3D 点,我想找到覆盖所有给定点的给定半径的最小球体数量。我不仅需要球体的数量,还需要球体本身,这样我就可以使用它们对我的点进行分组。

我需要这样一个算法的Python实现或者任何可以帮助我实现它的资源。我拥有的点数据集不是很大,因此解决方案不需要非常快。

如果有一个开箱即用的解决方案或简单的解决方案,那就太好了,因为我对 Python 不太熟悉。

python algorithm 3d
1个回答
0
投票

我相信您所描述的问题可以概括为:创建覆盖属于 3D 空间的一组点的最小数量的给定直径的球体。

CS 堆栈交换上有一篇文章描述了这个确切的问题以及可以解决该问题的算法的描述:https://cs.stackexchange.com/questions/48412/cover-points-with-minimal-number固定半径球体

解决方案似乎在于解决一个 NP 难题,因此根据输入的大小,它可能不可行。这个存储库似乎包含 CS 堆栈交换帖子中建议的算法的实现:https://github.com/farjasju/CliqueCover。它还包含一种启发式实现,可能不会产生最佳解决方案,但它可能足以适合您的用例。

这篇文章还建议研究一下聚类,我认为这可能不适合您的需求,但如果您发现上述方法不起作用,这可能是一个探索的方向。

© www.soinside.com 2019 - 2024. All rights reserved.