【发布时间】:2014-10-14 19:27:55
【问题描述】:
我正在寻找一种算法,它可以让我确定一个固体物体是否可以放入具有给定尺寸的盒子(矩形棱镜)内。实体可以旋转和平移以适合框内。
我已经有了解决这个问题的办法:
- 计算实体的最小边界框(已知算法)。
- 确定最小边界框是否适合另一个框(简单)。
(编辑:这不是一个有效的解决方案)
这可行,但我正在寻找更有效的解决方案。最小边界框算法在 O(n^3) 时间内运行,其中 n 是顶点数。我希望有一个 O(n^2) 算法。
请注意,我可能会询问形成实体凸包的点集是否可以放入框内,而不是“实体对象”。
【问题讨论】:
-
从实际的角度来看,我们在谈论多少个顶点?
-
在详细对象的真实模型上可以找到的数量,因此在 100 到 10,000 之间。
-
好的。好吧,其中许多顶点都不相关。只有离对象中心最远的那些才是重要的(“内部”或“凹”顶点都不重要,只有凸顶点),所以我首先只搜索那些将对您的计算产生影响的顶点。换句话说,您不需要太多细节就可以查看对象是否适合。
-
如果剔除过程在所有情况下都能让您减少到大约 100 个相关顶点,我不会感到惊讶,这将使您现有的 O(n^3) 算法可行。
-
@mikebolt:是的,但是如果最小边界球适合,最小边界框也可以。只有当它不适合时,您才需要更昂贵的最小边界框计算。如果大量输入数据通过边界球计算,则可以避免对大部分输入值进行边界框计算(因此,您将在 O(N^2) 和 O(N^3) 之间的某处获得摊销性能.
标签: algorithm computational-geometry