在 O(log n) 时间内确定一个点是否位于凸包中

Determine whether a point lies in a convex hull in O(log n) time

我研究了几种确定点是否位于凸包内的算法,但我似乎找不到任何算法可以在 O(logn) 时间内完成,我也想不出一个 myself.Let a[] 是一个包含凸包顶点的数组,我可以无论如何预处理这个数组,以便可以检查新点是否位于 O(logn) 的凸包内时间.

看起来你可以。

  1. 根据相对于其中一个顶点(称为 A)的极角对 a[] 中的顶点进行排序。 O(N log N),像凸包计算。
  2. 读取点,确定其极角。 O(1)
  3. 找到两个相邻顶点,其中一个顶点的极角应小于步骤 2 中的点,另一个顶点的角度应更大(B 和 C)。 O(log N),二分查找
  4. 然后是简单的几何图形:在 A、B、C 的点之间绘制三角形,并检查步骤 2 中的点是否位于内部。 O(1)