算法与多面体和半线相交

时间:2014-08-20 07:50:03

标签: r algorithm intersection numerical-methods convex-hull

我在R中寻找一个算法,将凸多边形与一个线段相交。我在飞机上的堆栈交换中发现了几个帖子,但我想知道这个算法是否存在于更高的维度。我的谷歌搜索并没有真正产生很多答案。

线段由凸多面体内部的点和外部的点组成。 R中是否有可用的算法可以在维度N <= 10?或者有人知道参考,所以我可以自己实现算法吗?是否有关于找到多面体和交叉点的复杂性的信息?

1 个答案:

答案 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定义(除非程序不可行,在这种情况下没有交点)。