Algorithm 二维空间中点的排序

Algorithm 二维空间中点的排序,algorithm,math,geometry,Algorithm,Math,Geometry,假设随机点P1到P20分散在一个平面上。 那么有没有办法按时钟方向或反时钟方向对这些点进行排序。 这里我们不能使用度数,因为您可以从图像中看到许多点可以具有相同的度数。 例如,在这里,P4、P5和P13获得相同的程度。你是说你想要一个有序的结果P1、P2、。。。P13 如果是这样的话,你需要找到点的位置。沿着船体的周长走一圈,你就会得到你需要的点的顺序 在实际意义上,看看OpenCV——使用顺时针=true调用convexHull,可以按您想要的顺序为您提供点向量。这个链接是C++的,但是C和

假设随机点P1到P20分散在一个平面上。 那么有没有办法按时钟方向或反时钟方向对这些点进行排序。

这里我们不能使用度数,因为您可以从图像中看到许多点可以具有相同的度数。
例如,在这里,P4、P5和P13获得相同的程度。

你是说你想要一个有序的结果P1、P2、。。。P13

如果是这样的话,你需要找到点的位置。沿着船体的周长走一圈,你就会得到你需要的点的顺序

在实际意义上,看看OpenCV——使用
顺时针=true调用
convexHull
,可以按您想要的顺序为您提供点向量。这个链接是C++的,但是C和Python API也在那里。其他软件包(如Matlab)应该具有类似的功能,因为这是一个需要解决的常见几何问题

编辑

一旦你得到你的凸包,你可以从外面迭代地折叠它来得到剩下的点。当外壳内部没有更多像素时,迭代将停止。您必须设置折叠函数,以便首先包含较近的点,即,您可以获得:

而不是:


在这两个图中,绿色是原始凸包,其他颜色是折叠区域。

你是说你想要一个有序的结果P1,P2。。。P13

如果是这样的话,你需要找到点的位置。沿着船体的周长走一圈,你就会得到你需要的点的顺序

在实际意义上,看看OpenCV——使用
顺时针=true调用
convexHull
,可以按您想要的顺序为您提供点向量。这个链接是C++的,但是C和Python API也在那里。其他软件包(如Matlab)应该具有类似的功能,因为这是一个需要解决的常见几何问题

编辑

一旦你得到你的凸包,你可以从外面迭代地折叠它来得到剩下的点。当外壳内部没有更多像素时,迭代将停止。您必须设置折叠函数,以便首先包含较近的点,即,您可以获得:

而不是:


在这两个图中,绿色是原始凸包,其他颜色是折叠区域。

如果您的图片在点之间有真实的距离,您可以随意选择一个点,比如说
P1
,然后始终选择最近的未访问邻居作为下一个点。旅行推销员,有点像。

如果你的照片在点之间有真实的距离,你可以随意选择一个点,比如说
P1
,然后总是选择最近的未访问的邻居作为你的下一个点。旅行推销员,有点像。

找到最右边的点(在
O(n)
)并按相对于该点的角度(
O(nlog(n))
)排序

这是格雷厄姆凸包算法的第一步,所以这是一个非常常见的过程

编辑:实际上,这是不可能的,因为点的多边形表示(即输出顺序)是不明确的。上述算法仅适用于凸多边形,但也可以扩展到适用于星形多边形(您需要选择不同的“参考点”)


您需要更精确地定义实际需要的顺序。

找到这些点中最右边的点(在
O(n)
中),并按相对于该点的角度进行排序(
O(nlog(n))

这是格雷厄姆凸包算法的第一步,所以这是一个非常常见的过程

编辑:实际上,这是不可能的,因为点的多边形表示(即输出顺序)是不明确的。上述算法仅适用于凸多边形,但也可以扩展到适用于星形多边形(您需要选择不同的“参考点”)


你需要更精确地定义你真正想要的顺序。

不,我只有20个点,它们是P1到P20及其x和y值,它的顺序并不意味着从P1到P20,它们分散在平面上。我想要的是使这些点按从P1到P20或从P20到P1的顺序排列。谢谢…………那么为什么凸面外壳不是您想要的呢?凸面外壳将移除凹面点。在我的例子中(见图),它将从P2到P7中删除点,这是不可取的。不,我只有20个点,即P1到P20及其x和y值,它的顺序并不意味着从P1到P20,这些点分散在平面上。我想要的是使这些点按顺序从P1到P20或从P20到P1。谢谢…………那么为什么凸面外壳不是您想要的呢?凸面外壳将移除凹面点。在我的例子中(参见图),它将删除P2到P7之间的点,这是不需要的。如果图像倾斜,使P19成为最右边的点,这将不起作用:P2-P8的顺序将不正确。最右边的点是P1。P4和P13相对于P1的角度是否相似?@Christian,正确-编辑了我的答案。这个问题在我发帖后就出现了。@Pritesh,这还不够!你可以有一个以上的时钟顺序为你的点。想象一个正方形和一个第五点在中间。您可以有至少4个全是按时钟顺序的订单。也就是说,中间点可以位于(唯一的,因为它是凸的)正方形的四个点之间。如果图像倾斜,那么P19成为最正确的点就不起作用:P2-P8不会被正确地排序。最右边的点是P1。P4和P13相对于P1的角度是否相似?@Christian,正确-编辑了我的答案。我一看到这个问题就明白了