【问题标题】:Optimally filling a 3D sphere with smaller spheres用较小的球体最佳地填充 3D 球体
【发布时间】:2017-03-22 13:07:03
【问题描述】:

我正在尝试用需要保持特定距离的“粒子”(由 3D XYZ 向量表示)以最佳方式填充 3D 球形体积,同时尽量减少它们之间的可用空间量.

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

有没有可以解决这类问题的算法?它不需要精确,但这里的关键是最终解决方案的密度需要相当准确(+/- ~5% 的“完美”解决方案)。

【问题讨论】:

    标签: algorithm 3d language-agnostic geometry


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您的限制有点模糊,很难确定,但我会为此尝试现场方法。初见:

      和子链接,您可以在其中找到这种方法的一些示例。

      现在算法:

      1. 在球体内随机放置N粒子

        N 应该安全地低,因此它小于您的溶液粒子数。

      2. 开始现场模拟

        因此,请使用您的解决方案规则来创建吸引力和排斥力,并通过 Newton D'Alembert 物理学驱动您的粒子。不要忘记添加摩擦力(这样运动会在一段时间后停止)和球体体积边界。

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

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

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

        不违反您的任何规则。如果是,请记住这个位置作为解决方案,然后使用N+1 粒子从 #1 重试。如果不停止并使用最后一个正确的解决方案。

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

      如何确定解决方案的准确性是完全不同的事情。由于您没有提供确切的规则,所以我们只能猜测。我会尝试估计理想的粒子密度并根据球体体积计算理想的粒子数。您也可以将其用于N 的初始猜测,然后与最终的N 进行比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        相关资源
        最近更新 更多