如果两条线有一个共同的端点,则它们属于同一条链。例如,定义为 (0, 0)-(Rnd, Rnd) 的 10 行是一个有效链,因为它们都有一个共同的端点。
我开发的算法在某些幸运的情况下非常快,而在其他情况下非常慢。对于 10,000 行,它可能需要几秒钟到几个小时之间的任何时间。
我正在寻求建议以加快速度。
链是由这样的循环创建的:
For Each Line in Lines
If Chain.HasPointInCommonWith(Line) Then
Chain.Add Line
Lines.Remove Line
End If
Next Line
为了避免运行测试太多次,我对关于它们的 XMin 的所有行进行了排序,并在寻找曲线的循环中添加了这个测试:
If Line.XMin > Chain.XMax Then Exit For
当线条代表许多矩形时,此测试效果很好,一个在另一个的右侧,但如果它们是多个矩形,则无济于事。