设P是具有n个顶点的3D凸多面体 1.给定一个以任意点q作为输入的算法,如何在O(n)时间内确定q是在凸多面体的内部还是外部? 2.我可以进行一些处理以使其成为O(logn)吗?
答案 0 :(得分:1)
对于(1),如果你有一个带有n个顶点的凸多面体,那么你也有O(n)个面。可以对每个面进行三角测量,总的来说它仍然是O(n)个三角形。现在取查询点q并检查三角形q的哪一侧。该检查对于一个三角形采用O(1),因此对于所有三角形采用O(n)。 编辑:O(n)面定义O(n)面。只需检查q是否位于所有飞机的同一侧。
对于(2),(我没有找到这个的来源但看起来合理)可以将多面体P投影为P'到一个平面上。 P'可以看作是两个单独的平面图,一个图表U'表示多面体的上部,另一个图表L'表示下部。在L'和U'中总共有O(n)个面。现在可以通过Kirkpatrick optimal planar subdivision算法预处理L'和U'。 (其他来源:1和2)这样可以在PSLG(平面直线图)检查中启用O(log n)点。
现在使用查询点q并将其投影到具有相同投影的同一平面,可以查看L'和U'的面,它位于O(log n)时间内。在3D中,每个面都位于一个平面中。现在我们检查q在哪一侧q是否知道q是否在多面体内。
答案 1 :(得分:1)
(2)的另一种方法是将多面体空间细分为 slubs - 金字塔,其顶点位于多面体质心和多面体面作为基础。此类楼板的数量为O(n)
。您可以构建一个二进制空间分区树(BSP),由这些俱乐部组成(可能分为子俱乐部) - 如果它是平衡的,那么点位置将在O(logn)
时间内起作用
当然,如果您需要多次调用点位置函数,这将是有意义的 - 因为此处的预处理步骤将花费O(n)
时间(或更多)。