dim*_*imi 42 algorithm graphics geometry computational-geometry
测试点P是否在由一组点X形成的凸包内的最简单方法是什么?
我想要一种在高维空间(例如,最多40维)中工作的算法,该算法不会明确地计算凸包本身.有任何想法吗?
use*_*136 23
通过找到线性程序的可行点可以解决该问题.如果您对完整的细节感兴趣,而不是将LP插入现有的求解器,我建议您阅读Boyd和Vandenberghe关于凸优化的优秀书中的第11.4节.
设置A = (X[1] X[2] ... X[n]),即第一列是v1第二列v2,等等.
解决以下LP问题,
minimize (over x): 1
s.t. Ax = P
x^T * [1] = 1
x[i] >= 0 \forall i
Run Code Online (Sandbox Code Playgroud)
哪里
x^T 是的转置 x[1] 是全1矢量.如果该点位于凸包中,则问题有解决方案.
Sva*_*nte 21
该点位于其他点的凸包之外,当且仅当所有矢量从其到其他点的方向不到其周围的圆/球/超球的一半时.
这是两个点情况的草图,凸面船体内部的蓝色部分(绿色)和外部的红色部分:
对于红色的那个,存在圆的二等分,使得从点到凸包上的点的矢量仅与圆的一半相交.对于蓝点,不可能找到这样的二分法.
Nik*_*bak 10
您不必计算凸包本身,因为它在多维空间中看起来相当麻烦.有一个众所周知的凸壳属性:
点v凸壳内的任何矢量(点)[v1, v2, .., vn]可以表示为sum(ki*vi),where 0 <= ki <= 1和sum(ki) = 1.相应地,凸包外的任何点都不具有这种表示.
在m维空间中,这将给出一m组具有n未知数的线性方程.
编辑
我不确定这个新问题的复杂性在一般情况下,但因为m = 2它似乎是线性的.也许,在这方面有更多经验的人会纠正我.