我有一个List(Of Point) - 可能有数十万个点。我似乎能够正确使用它的唯一方法就是按照它们之间的距离对它进行排序。
[我在集合上使用了CCL和凸包,但结果仍然是大量的紧密哈希 - 或者如果我之后按照中心,斜坡或其他东西的角度对它们进行排序的话,还是很好的辐射线
有没有办法按连续点之间的距离对点列表进行排序?
我用过
Dim orderedByX As List(Of Point) = listOfPoints.OrderBy(Function(pt) pt.X).ToList()
答案 0 :(得分:1)
您最需要构建point, distance
对。例如,您可以通过使用相同列表的移位版本压缩列表来执行此操作。然后按距离对序列进行排序,并选择与距离对应的点。
Dim sortedPoint = listOfPoints.Zip(listOfPoints.Skip(1), Function(p1, p2) New With { .Point = p2, .Distance = (p2 - p1).Length }).OrderBy(Function(v) v.Distance).Select(Function(v) v.Point)
我仍然认为这不是你真正想要的。我认为结果列表相当无用。