加入无序线段

时间:2009-09-16 23:57:50

标签: algorithm geometry

我的算法生成一个(通常)数千个线段(所有2D)的列表,我需要将它们连接成大折线。这些生成的折线可能是封闭的或打开的,但它们永远不会自相交。线段不是定向的,即在线段可以连接到其邻居之前可能需要翻转线段。

找到这些折线的极快方法是什么?我必须实时做到这一点,所以任何花费超过-10秒的时间都不是解决方案。

我在C#中这样做,但我正在寻找想法,而不是来源。

1 个答案:

答案 0 :(得分:12)

端点的哈希值是否有效?

如果端点完全匹配,那么您可以在散列中将每个对象存储两次,每个端点一次。然后,为每个对象查找其两个端点。您将获得需要加入的任何其他对象。

如果端点有任何不精确性,那么您需要一个spatial index,可能还需要一个that uses an R-tree。只需制作2d哈希网格即可获得类似的效果。哈希网格包含附近端点的桶。您需要检查相邻的单元格。