如何确定固体是否适合O(N ^ 2)中给定的盒子?

时间:2014-10-14 19:27:55

标签: algorithm computational-geometry

我正在寻找一种算法,让我可以确定一个实体对象是否适合具有给定尺寸的方框(矩形棱柱)。固体可以旋转并平移以适合盒子内部。

我已经有了解决这个问题的方法:

  1. 计算实体的最小边界框(已知算法)。
  2. 确定最小边界框是否适合另一个框(简单)。
  3. (编辑:这不是一个有效的解决方案)

    这有效,但我正在寻找更有效的解决方案。最小边界框算法在O(n ^ 3)时间内运行,其中n是顶点数。我希望有一个O(n ^ 2)算法。

    请注意,除了“实体”之外,我也可以问一下,形成实体凸包的点集是否适合框内。

3 个答案:

答案 0 :(得分:4)

您可能需要查看this paper。它给出的算法比在O(n log n + 1 / epsilon ^ 3)时间内计算3D最小边界框的1 + epsilon近似值。

答案 1 :(得分:0)

迅速裁定某些物品

如果您希望答案通常为&#34; No&#34;,您可以快速排除许多实例(公平地),如下所示:如果有一对点间隔超过最长的对角线你的盒子,然后形状不可能适合它。这是O(n ^ 2),但你可以在找到一个更远的一对时立即停止,你也可以先沿着最长的维度对点进行排序,并从相对的两端获取点作为你的对,以增加找到的机会< / p>

结合Eric J.的建议,使用边界球来规划中的对象,这可能会很快解决很多情况。

快速统治

中的一些对象

你有另一个选择就是随机地投射点数,并计算AABB;如果它适合你的盒子,你就完成了。这需要generating random unit-length vectors

答案 2 :(得分:0)

如果this没有过时,目前没有更快的确切算法:

  

目前最快的3D边界长方体算法是[O&#39; Rourke,1985],它在O(n3)时间运行,有几个特殊情况,并且实现起来要困难得多。 O'Rourke的algoruthm基于他的观察,即“一个包围凸多面体的最小体积框必须至少有两个包含多面体边缘的相邻面。”没有找到更快的精确算法。

     

无论如何,由于O(n3)算法在大型点集的实践中可能非常慢,因此对3D和更高维度中的最小立方体的快速近似有相当大的兴趣。已经提出了几种方法,例如:(1)仅考虑具有与多面体面重合的长方体(如[O&#39; Rourke,1985]中所讨论的O(n2)),也可以是2次(2)关于点集的主成分分析(速度很快,但往往导致解决方案很差),(3)采用蛮力方法对长方体进行多种可能的取向,(4)减少一个大点设置为较小的近似集(例如,通过选择包含设定点的离散网格中的单元格)[Barequet&amp; Har-Peled,1999]等。所有这些方法都在解决方案的准确性与执行效率之间进行权衡。

因此,您必须决定是否需要准确的结果,或者您是否可以接受所引用文章的近似和使用。