vb.net - 按连续点之间的距离对点列表进行排序

标签 vb.net algorithm sorting distance point

我有一个 List(Of Point) - 可能有数十万个点。看来,我可以使用它来正确绘制某些东西的唯一方法是根据它们之间的距离对其进行排序。

[我在场景中使用了 CCL 和凸包,但结果仍然是大量紧凑的散列 - 或者如果我之后按距中心的角度、斜率或其他方式对它们进行排序,则结果是漂亮的辐射线]

有什么方法可以根据连续点之间的距离对点列表进行排序吗?

我用过

Dim orderedByX As List(Of Point) = listOfPoints.OrderBy(Function(pt) pt.X).ToList()

最佳答案

您首先需要构造点、距离 对。例如,您可以通过使用同一列表的移位版本压缩列表来做到这一点。然后按距离对序列进行排序,并选择与距离对应的点。

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)

我仍然认为这不是您真正想要的。我认为生成的列表毫无用处。

关于vb.net - 按连续点之间的距离对点列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593365/

相关文章:

java - Java 中的中位数

ios - 按距离(纬度和经度)排序表

ASP.net Vb.Net Label.Text 不更新

.net - 了解 AddHandler 并传递委托(delegate)和事件

asp.net - 对于如何使用 VB.NET 在 ASP.NET 中创建按钮单击事件,为什么选择私有(private)与 protected ?

c++ - 一个好的随机数生成器的想法是什么?

algorithm - System.Security.Cryptography.BCryptHashAlgorithm。此平台不支持指定的加密算法

arrays - 在 VB.NET 中将字符串数组转换为 double 组

java - 排序插入位置

swift - 用 tie 元素按值排序字典不应更改其顺序