如果点在凸包的内部/外部,则进行粗略测试

时间:2018-05-31 20:35:01

标签: computational-geometry convex-hull

我正在研究一种算法,我必须检查点是在某些点的凸包内部还是外部。问题是

  1. 我必须检查这个问题很多:~2000,
  2. 定义凸包的点云有大约10000点,
  3. 我工作的尺寸非常高:10-50。
  4. 对于我的观点,唯一可能的积极因素是,对于每个点x,还有-x,因此这些点定义了一个点对称多面体,并且凸包不是退化的(非 - 空的内部)。

    现在我正在使用线性编程,例如在https://stackoverflow.com/a/11731437/8052809

    为了加速我的程序,我想在计算它之前估计一个点是否确定在凸包的内部或外部。换句话说,我需要一些快速算法,可以确定某些点是否在内部,分别是。它们是否在外面 - 对于某些点,快速算法无法决定它。

    我现在正在做的事情是首先查看我的pointcloud的边界框,然后是https://stackoverflow.com/a/4903615/8052809中的方法 - yombo评论。 但是这两种方法只能确定一个点是否确定在外面(并且两种方法都相当粗糙)。

    由于我检查的大部分点都在里面,所以我大多需要一个测试来确定一个点是否确定在内部。

    长问题: 我需要一种能够非常快速地测试的算法,无论一个点是否在凸包的内部/外部。 允许algorihm报告"内部","不知道"和"外部"。

1 个答案:

答案 0 :(得分:1)

为了快速清除经认证在凸包内部的点,您可以重复使用在边界框计算中找到的点。 即,每个维度中包含最小值和最大值的2k点(维数为k)。

你可以构造一个小的(2k约束)线性规划问题,并清除这些2k点的凸包内的任何点。

您可以为查询点和原始点云执行此操作,这将为您留下较小的线性编程问题,以解决剩余的点。