Algorithm 有没有一个有效的算法来寻找一组无限直线的所有交点?

Algorithm 有没有一个有效的算法来寻找一组无限直线的所有交点?,algorithm,geometry,computational-geometry,Algorithm,Geometry,Computational Geometry,有一些高效的(与O(n2)成对测试相比)算法用于查找一组线段中的所有交点,如Bentley-Ottmann算法。但是,我想找到一组无限直线中的所有交点。当感兴趣的区域是有限的,如矩形时,可以在剪裁直线后应用线段相交算法。但是 有没有一种比裁剪直线和应用线段相交算法更简单或更有效的方法 对于一组直线的整个平面上的所有交点,是否有一个有效的算法 在一般情况下(并非所有直线都平行),存在O(n^2)个交点,因此简单环路和交点计算是最佳方法 (没有计算就无法获得n*(n-1)/2点) 对于存在大量平行

有一些高效的(与O(n2)成对测试相比)算法用于查找一组线段中的所有交点,如Bentley-Ottmann算法。但是,我想找到一组无限直线中的所有交点。当感兴趣的区域是有限的,如矩形时,可以在剪裁直线后应用线段相交算法。但是

  • 有没有一种比裁剪直线和应用线段相交算法更简单或更有效的方法
  • 对于一组直线的整个平面上的所有交点,是否有一个有效的算法
在一般情况下(并非所有直线都平行),存在O(n^2)个交点,因此简单环路和交点计算是最佳方法
(没有计算就无法获得
n*(n-1)/2
点)

对于存在大量平行线的情况,首先按方向对线进行分组,并仅检查不同组中的线之间的交点

在一般情况下(并非所有线都是平行的),有O(n^2)个交点,因此简单的循环和交点计算是最佳方法
(没有计算就无法获得
n*(n-1)/2
点)


对于存在大量平行线的情况,首先按方向对线进行分组,并仅检查不同组线之间的交点

如果线处于一般位置,则所有线对都相交,且穷举计算是最佳的。

如果线处于一般位置,所有对都相交,穷举计算是最优的。

直线段算法通常利用空间的拓扑和/或空间细分。它们仍然是二次的
~O((n/m)^2)
,但
m
是细分的数量,这使得速度大大加快。这里有一个例子:。然而,无限长的直线无法在空间上有效细分,这使得这种算法无法使用。我唯一能想到的就是计算每条线的单位方向向量,按它对线进行排序,忽略平行线。其余的仍然是
~O(n^2)
,但这不会给你太多…分段的有效算法最多是O(n logn+K),它可以退化为O(n²)。对于无限长的直线,O(N²)是不可避免的。线段算法通常利用拓扑和/或空间细分。它们仍然是二次的
~O((n/m)^2)
,但
m
是细分的数量,这使得速度大大加快。这里有一个例子:。然而,无限长的直线无法在空间上有效细分,这使得这种算法无法使用。我唯一能想到的就是计算每条线的单位方向向量,按它对线进行排序,忽略平行线。其余的仍然是
~O(n^2)
,但这不会给你太多…分段的有效算法最多是O(n logn+K),它可以退化为O(n²)。对于无限长的直线,O(N²)是不可避免的。