2017-03-22 63 views
0

我试图用“粒子”(由3D XYZ向量表示)以最佳方式填充3D球体体积,同时需要保持彼此之间的特定距离,同时尝试最小化量他们之间存在的自由空间。用较小的球体最佳填充3D球体

虽然有一个捕获 - 粒子本身可能会落在球形体积的边界上 - 它们不能在其外部存在。理想情况下,我想最大化落在这个边界上的粒子数量(这使得这是一种球形填充问题,我想),然后向内填充剩余的体积。

有没有可以解决这类事情的任何种算法?它并不需要精确,但关键在于最终解决方案的密度需要相当准确(“完美”解决方案的+/- 5%)。

回答

1

您的约束条件有点含糊不清,所以很难说,但我会尝试使用字段方法。第一次看到:

和子链接在这里你可以找到这种方法的一些例子。

现在算法中:

  1. 地方N颗粒随机内球

    N应该是安全的低,因此它更小那么你的解决方案的粒子计数。

  2. 开始场模拟

    所以使用您的解决方案规则创建的吸引力和排斥力,推动通过牛顿D'兰伯特物理学的粒子。不要忘记增加摩擦力(所以运动将在一段时间后停止)和球体积边界。

  3. 停止当你的粒子停止移动

    所以如果max(|particles_velocity|)<threshold停止。

  4. 现在检查是否所有的粒子都正确放置

    没有违反任何规则。如果是,那么记住这个位置作为解决方案,并再次尝试从#1N+1颗粒。如果不停止并使用最后的正确解决方案。

    为了加快速度,您可以添加更多的粒子,而不是使用类似于二分查找的(N+1)(添加32个粒子,直到您可以...然后只是16 ...)。另外,您不需要在其他运行中使用#1中的随机位置。您可以让其他粒子开始放置在上次运行解决方案中的位置。

如何确定解决方案的准确性是完全不同的问题。由于您没有提供确切的规则,我们只能猜测。我会尝试估计理想的颗粒密度并根据球体积计算理想的颗粒计数。你也可以使用这个来初始猜测N,然后和最后的N比较。

1

没有一个公式用球体最佳地填充球体。在this维基百科页面上,您可以看到的最佳配置n < = 12。对于的最佳配置n < = 500您可以查看this网站。正如你在这些网站上看到的,不同数量的球体有不同的最佳对称组。