我的算法生成一个(通常)数千个线段(所有2D)的列表,我需要将它们连接成大折线。这些生成的折线可能是封闭的或打开的,但它们永远不会自相交。线段不是定向的,即在线段可以连接到其邻居之前可能需要翻转线段。
找到这些折线的极快方法是什么?我必须实时做到这一点,所以任何花费超过-10秒的时间都不是解决方案。
我在C#中这样做,但我正在寻找想法,而不是来源。
答案 0 :(得分:12)
如果端点完全匹配,那么您可以在散列中将每个对象存储两次,每个端点一次。然后,为每个对象查找其两个端点。您将获得需要加入的任何其他对象。
如果端点有任何不精确性,那么您需要一个spatial index,可能还需要一个that uses an R-tree。只需制作2d哈希网格即可获得类似的效果。哈希网格包含附近端点的桶。您需要检查相邻的单元格。