扫描算法

时间:2009-04-02 16:15:57

标签: algorithm geometry

谁可以向我推荐一款良好的扫描算法,这对双倍数据有很好的效果? 一些文档,方法,任何东西。

这是用于检测二维空间中的图的交点的扫描算法。图表始终关闭。

2 个答案:

答案 0 :(得分:1)

http://www.amazon.com/Computational-Geometry-Algorithms-Applications-Second/dp/3540656200中的那个非常好。

测试交叉路口的扫描线非常简单。这是一篇可以帮助您入门的论文:http://www.cs.umd.edu/~mount/Papers/crc-intersect.pdf

答案 1 :(得分:0)

到目前为止,我已经为扫描算法实现了3个变体,用于检测平面闭合图的交点。我有表示图形的大数据(如200个边缘或更多。顶点是2D中的点对,边缘是一对两个顶点 - 一个是源,另一个是目标),它是从另一个函数中读取的用于其他目的的C ++库。

问题是3实现在整数或双倍数据上运行时间不长,但是当我在表示图形的数据上尝试这3个实现中的任何一个时,我每次都得到不同的结果,甚至不是好的

  • 我是否拥有我想要的所有交叉点,但是图表中的其他点(不是交点)

  • 我是否从图表中得到一些点作为结果,但计算结果中缺少一些我需要的交叉点

  • 我是否只需要交叉点

这一切都取决于我看到的排序功能,也许取决于其他东西,但我无法理解。 sort函数按如下顺序排列图的边缘:

将两条边指定为E1(Vstart,Vend), E2(Vstart,Vend)

x.E1.Vstart<x.E2.Vstart or
x.E1.Vstart==x.E2.Vstart and y.E1.Vstart<y.E2.Vstart or 
x.E1.Vstart==x.E2.Vstart and y.E1.Vstart==y.E2.Vstart and slope(E1)<slope(E2)

我认为这种排序功能对单色性和其他情况有好处,但显然它只适用于某些情况,除了常规交叉点之外它还检测到其他一些交叉点;在某些情况下,它确实起作用,因为它不会计算所有的交叉点,而只是图中的某些点。