我在R中寻找一个算法,将凸多边形与一个线段相交。我在飞机上的堆栈交换中发现了几个帖子,但我想知道这个算法是否存在于更高的维度。我的谷歌搜索并没有真正产生很多答案。
线段由凸多面体内部的点和外部的点组成。 R中是否有可用的算法可以在维度N <= 10?或者有人知道参考,所以我可以自己实现算法吗?是否有关于找到多面体和交叉点的复杂性的信息?
答案 0 :(得分:1)
对于计算几何中的问题,维度d > 3
通常也可能d
是任意的。如果您将多面体作为交叉半空间的集合,则可能唯一明智的做法是将线段与每个分离超平面相交(通过求解d
线性方程组)并取交点最接近内部的点。
如果你只有多面体的顶点,或者只有一组凸顶是多面体的顶点,那么给出R的库最简单的方法可能就是线性编程。 (可以想象你可以使用算法计算小平面以找到高维凸壳,但它们可能有Theta(n^floor(d/2))
,其中n
是顶点的数量。)我不熟悉LP R中的求解器,所以我将以数学方式写下程序。翻译不应该太难。让p_0
为外部点,p_1
为内部点,v_i
为定义多面体的i
点。
maximize alpha_0
subject to
for 1 <= j <= d,
p_0[j] alpha_0 + p_1[j] alpha_1 - sum_{1 <= i <= n} v_i[j] beta_i = 0
alpha_0 + alpha_1 = 1
sum_{1 <= i <= n} beta_i = 1
alpha_0 >= 0
alpha_1 >= 0
for 1 <= i <= n,
beta_i >= 0
交点由点p_0 alpha_0 + p_1 alpha_1
定义(除非程序不可行,在这种情况下没有交点)。