我有一个边列表,这些边由一个包含坐标的点数组组成。
我试图删除作为另一条边的子集的任何边,即其中一条边的所有点按顺序包含在另一条边中(尽管顺序可能意味着向后和向前)。
我正在努力想出一个不需要四个嵌套 for 循环的解决方案(通过边缘循环,再次通过边缘循环,通过第一个点循环,通过第二个点循环,比较)。有没有更快的处理方法?或者至少不会那么糟糕。
谢谢。
编辑:这一切都是在 C# 中完成的。我也已经有了一种比较点是否相等的方法。
编辑:
如果这是一条线(假装数字是坐标)。
1-----2-----3-----4-----5-----6
这是由一些相同的点组成的另一条线:
3------4------5
第二个是第一个的子行,所以我想从列表中删除第二个。
最佳答案
构建从每对点(即线段)到边和索引对的集合的映射,其中边在该索引处具有该线段。然后,遍历映射条目,遍历集合的第一条边,遍历集合的第二条边,并从给定的索引开始向外比较它们。
关于c# - 检查边缘列表中子集的合理快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22632659/