Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 按连续点之间的距离对点列表排序_Vb.net_Algorithm_Sorting_Distance_Point - Fatal编程技术网

Vb.net 按连续点之间的距离对点列表排序

Vb.net 按连续点之间的距离对点列表排序,vb.net,algorithm,sorting,distance,point,Vb.net,Algorithm,Sorting,Distance,Point,我有一份(要点)清单——可能有几十万个要点。我能用它来正确地画东西的唯一方法,似乎是按它们之间的距离来排序 [我在集合中使用了CCL和凸包,但结果仍然是大量紧密的散列-或者如果我在之后按中心角度、坡度或其他方式对它们进行排序,则会得到很好的辐射线] 有没有办法按照连续点之间的距离对点列表进行排序 我用过 Dim orderedByX As List(Of Point) = listOfPoints.OrderBy(Function(pt) pt.X).ToList() 您需要构建点、距离对。例

我有一份(要点)清单——可能有几十万个要点。我能用它来正确地画东西的唯一方法,似乎是按它们之间的距离来排序

[我在集合中使用了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)

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

所有点对之间有距离吗?我有一个点列表,所有点都是不同的。你到底想做什么??从无序点列表重建非凸多边形??将点列表转换为线列表,然后按线距离排序是否更有意义?在我看来,如果应用凸包算法,应该将点列表(构成凸包的点)保存在有序列表中。如果您在显示凸面外壳时遇到问题,那么您的问题在于从lat/long到像素的转换。哇,这太好了!我最终做到了这一点,找到了最小距离,找到了与每个点之间具有该距离的点-然后将其添加到新列表中,并将其从当前列表中删除。。。但是哇!我最终成功了,不过我肯定也会尝试。谢谢。这行代码很简单。首先,我们有一个点列表-
p[i]
。然后我们把前一个点粘到每个点上,得到一个
{p[i-1],p[i]}
序列,我们立即把它变成
{point=p[i],Distance=(p[i]-p[i-1])。Length}
。然后我们按距离对序列排序并提取点。:)Linq中“简单”的定义是什么?(或者,有什么东西不能用一行写的吗?)。。。LINQ肯定是甜美的=)认真地说,LINQ没有“分支”/“t型连接”,所以任何分支都必须在多行中完成。我写了两次
listOfPoints
来规避这个问题,但如果它不是一个列表,而是一个来自数据库的流,我需要第二行和足够的内存来容纳所有点。