在 O(log n) 时间内确定一个点是否位于凸包中
Determine whether a point lies in a convex hull in O(log n) time
我研究了几种确定点是否位于凸包内的算法,但我似乎找不到任何算法可以在 O(logn) 时间内完成,我也想不出一个 myself.Let a[] 是一个包含凸包顶点的数组,我可以无论如何预处理这个数组,以便可以检查新点是否位于 O(logn) 的凸包内时间.
看起来你可以。
- 根据相对于其中一个顶点(称为 A)的极角对
a[]
中的顶点进行排序。 O(N log N),像凸包计算。
- 读取点,确定其极角。 O(1)
- 找到两个相邻顶点,其中一个顶点的极角应小于步骤 2 中的点,另一个顶点的角度应更大(B 和 C)。 O(log N),二分查找
- 然后是简单的几何图形:在 A、B、C 的点之间绘制三角形,并检查步骤 2 中的点是否位于内部。 O(1)
我研究了几种确定点是否位于凸包内的算法,但我似乎找不到任何算法可以在 O(logn) 时间内完成,我也想不出一个 myself.Let a[] 是一个包含凸包顶点的数组,我可以无论如何预处理这个数组,以便可以检查新点是否位于 O(logn) 的凸包内时间.
看起来你可以。
- 根据相对于其中一个顶点(称为 A)的极角对
a[]
中的顶点进行排序。 O(N log N),像凸包计算。 - 读取点,确定其极角。 O(1)
- 找到两个相邻顶点,其中一个顶点的极角应小于步骤 2 中的点,另一个顶点的角度应更大(B 和 C)。 O(log N),二分查找
- 然后是简单的几何图形:在 A、B、C 的点之间绘制三角形,并检查步骤 2 中的点是否位于内部。 O(1)