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