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

时间:2015-03-02 02:28:34

标签: performance algorithm computational-geometry point convex-hull

我已经研究了几种算法来确定一个点是否位于一个凸包中,但是我似乎找不到任何可以在O(logn)时间内完成这个技巧的算法,也不能自己想出一个算法。 。让一个[]是一个包含凸包顶点的数组,我是否可以预先处理这个数组,以便在O(logn)时间内检查一个新点是否位于凸包内。

1 个答案:

答案 0 :(得分:1)

看起来你可以。

  1. a[]中的顶点相对于其中一个顶点(称为A)以极角排序。 O(N log N),与凸壳计算一样。
  2. 读取点,确定其极角。 O(1)
  3. 找到两个相邻顶点,其中一个应该具有小于步骤2中的点的极角,而其他顶点应该具有更大的角度(B和C)。 O(log N),二分搜索
  4. 然后简单几何:在A,B,C之间绘制点之间的三角形,并检查步骤2中的点是否位于内部。 O(1)