我正在研究一种算法,我必须检查点是在某些点的凸包内部还是外部。问题是
对于我的观点,唯一可能的积极因素是,对于每个点x
,还有-x
,因此这些点定义了一个点对称多面体,并且凸包不是退化的(非 - 空的内部)。
现在我正在使用线性编程,例如在https://stackoverflow.com/a/11731437/8052809
中为了加速我的程序,我想在计算它之前估计一个点是否确定在凸包的内部或外部。换句话说,我需要一些快速算法,可以确定某些点是否在内部,分别是。它们是否在外面 - 对于某些点,快速算法无法决定它。
我现在正在做的事情是首先查看我的pointcloud的边界框,然后是https://stackoverflow.com/a/4903615/8052809中的方法 - yombo评论。 但是这两种方法只能确定一个点是否确定在外面(并且两种方法都相当粗糙)。
由于我检查的大部分点都在里面,所以我大多需要一个测试来确定一个点是否确定在内部。
长问题: 我需要一种能够非常快速地测试的算法,无论一个点是否在凸包的内部/外部。 允许algorihm报告"内部","不知道"和"外部"。
答案 0 :(得分:1)
为了快速清除经认证在凸包内部的点,您可以重复使用在边界框计算中找到的点。 即,每个维度中包含最小值和最大值的2k点(维数为k)。
你可以构造一个小的(2k约束)线性规划问题,并清除这些2k点的凸包内的任何点。
您可以为查询点和原始点云执行此操作,这将为您留下较小的线性编程问题,以解决剩余的点。