【问题标题】:Algorithm to optimally fit a sphere between other spheres in a 3D bounding box?在 3D 边界框中以最佳方式拟合其他球体之间的球体的算法?
【发布时间】:2019-11-07 21:43:55
【问题描述】:

我正在努力解决一个 3D 问题,我正在努力寻找一种有效的算法。

我有一个给定宽度、高度和深度的边界框。
我也有一个球体列表。即每个的中心坐标 (xi,yi,zi) 和半径 ri球体。

保证球体能适应边界框,并且不会相互重叠。

所以我的情况是这样的:

现在我有了一个半径为 r 的新球体,我必须将其放入边界框内,而不是与之前的任何球体重叠。

我还有一个目标点 T = (x,y,z),我的目标是让这个新球体(在上述条件下)尽可能靠近这个目标点。

我正在尝试构建一种有效的算法来找到新球体的最佳位置。 Optimal as in:尽可能靠近目标点。或者,如果边界框内的任何地方都没有空间可以在现有球体之间或周围放置新球体,则结果为“假”。

我已经想到了各种复杂的方法,例如构建剩余体积的某种参数化描述,从边界框开始,并逐个减去现有球体。但这似乎并没有引导我找到可行的解决方案。

请注意,有很多已知的“球体填充”算法,但它们往往只是用随机球体填充体积。他们也经常使用试错法,只是做一定数量的随机尝试然后终止。

而我有一个给定的特定新球体尺寸,我需要适应它(或发现这是不可能的)。

【问题讨论】:

  • 将所有现有球体扩大 r 并尝试在边界框中放置一个点,该点不在任何球体内部。这在一定程度上简化了问题,但仍然没有提供最佳解决方案。
  • 谢谢,是的,我也想过这个问题。这将问题减少到在一组球体之间找到一个点。但在这种情况下,我仍然看不到如何有效地搜索尽可能接近 T 的点。
  • 应用@samgak 的巧妙技巧后,我将使用有符号距离函数来表示现有球体:这是一个函数,给定一个 (x, y, z) 点,返回一个浮点值这给出了到最近球体表面的距离,或者如果该点在球体内,则为负值——这实际上只是所有现有球体上EuclideanDistance((cx[i], cy[i], cz[i]), (x, y, z)) - cr[i] - r 的最小值。这可以通过仅考虑“附近”球体来加速。尝试在几个方向上小步走,然后朝着最能增加功能的方向移动。

标签: algorithm optimization 3d volume packing


【解决方案1】:

一种可能的方法是计算球体的“距离图”,即返回每个点 (x, y, z) 到最近球体的距离的函数,这也是到最近中心的距离减去对应球体的半径。该地图由(超)圆锥曲面的交集组成。

然后你可以探索目标点周围的距离图,找到值超过目标半径的最近点。

如果我是对的,距离图与球心的加性加权 Voronoi 图(https://en.wikipedia.org/wiki/Weighted_Voronoi_diagram)直接相关,图的顶点对应于局部最大值。因此,值超过目标半径的最近的 Voronoi 顶点将给出解决方案。

不幸的是,这个图表的构建不会是一个笑话。查看文章“3D球的欧几里得Voronoi图及其计算 通过追踪边缘”及其参考书目。


估计距离图的一种可能可行的解决方案是在规则的立方体网格中离散化空间,并为每个立方体获取距离函数的下限和上限。

对于单个给定的球体和给定的立方体,可以通过解析找到最小值和最大值。然后考虑所有球体,您可以找到最小的最大值和最小的最小值,它们是真实距离的上限和下限(最大的最小值不会做)。然后,您保留所有球体,使最小值保持在该上限以下,然后您将获得(希望是简短的)候选者列表。

这里可以查看到列表中球体的距离,如果上限小于目标半径,则可以放下立方体。如果您找到目标半径以上的上限,则您已经找到了解决方案。 否则,如果距离函数的不确定范围太大,则将立方体细分为较小的立方体,以便更准确地估计上下限。

要获得接近目标点的解,您将通过增加与目标的距离(使用嵌套数字球体)来访问立方体,直到找到匹配项。

此过程的一个关键点是快速找到最接近给定立方体的球体,以进行初始估计。 kD-tree 或类似的数据结构可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多