粗略测试点是否为凸包的 inside/outside

Rough test if points are inside/outside of convex hull

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

  1. 我要检查这个很多点:~2000,
  2. 定义凸包的点云有大约 10000 个点,
  3. 我工作的尺寸相当高:10-50。

我的观点唯一可能的积极因素是,对于每个点 x,也有 -x,因此这些点定义了一个点对称多面体,并且凸包没有退化(内部非空)。

现在我正在用线性规划来做这个,例如

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

我现在正在做的是首先查看我的点云的边界框,其次是 中的方法 - yombo 的评论。 但是这两种方法都只能确定一个点是否肯定在外面(而且这两种方法都比较粗糙)。

因为我检查的大部分点都在内部,所以我主要需要一个测试来确定一个点是否肯定在内部。

长问短: 我需要一种可以非常快速地测试的算法,无论一个点是否 inside/outside 凸包。 允许该算法报告 "inside"、"no idea" 和 "outside".

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

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

您可以对查询点和原始点云都执行此操作,这将为您留下一个较小的线性规划问题来解决剩余的点。