Algorithm 排序多边形';s点

Algorithm 排序多边形';s点,algorithm,geometry,computational-geometry,Algorithm,Geometry,Computational Geometry,我有一个凸多边形ABCDE。。。(它可以有任意数量的点)。我需要对其所有顶点进行排序,以便所有边都不会相交。 例如: 按ABCD顺序排列的多边形具有相交边。然而,按照ABDC顺序: A _____ B | | | | | | | | |___| C D 所有边都不相交,因此ABDC是预期的输出 如何执行此操作?在多边形上选择两个点。直线的中点将包含在该多边形中。让这一点是M 然后,根据从M开始的角度(沿X轴)对点进行排序,根据从M开始的距离打破简

我有一个凸多边形ABCDE。。。(它可以有任意数量的点)。我需要对其所有顶点进行排序,以便所有边都不会相交。
例如:

按ABCD顺序排列的多边形具有相交边。然而,按照ABDC顺序:

A _____ B
  |   |
  |   |
  |   |
  |   |
  |___|
C       D
所有边都不相交,因此ABDC是预期的输出


如何执行此操作?

在多边形上选择两个点。直线的中点将包含在该多边形中。让这一点是M


然后,根据从M开始的角度(沿X轴)对点进行排序,根据从M开始的距离打破简并度。按该顺序迭代可确保没有两条边相交。

假设点都位于多边形的凸包上,可以使用以下方法:

  • 选择具有最小和最大X值的两个极值点(称为Xmin和Xmax),并在它们之间画一条线。在极端情况下,如果有多个点具有相同的X值,则选择最小Y值的Xmin和最大Y值的Xmax
  • 将点列表拆分为两个子列表,其中连接Xmin和Xmax的线下方的所有点位于一个列表中,该线上方的所有点位于另一个列表中。在第一个列表中包含Xmin,在第二个列表中包含Xmax
  • 按X值的升序对第一个列表进行排序。如果有多个点具有相同的X值,请按Y值升序对它们进行排序。由于多边形是凸的,因此这只应发生在X分量与Xmax相同的点上
  • 按X值的降序对第二个列表进行排序。同样,如果有多个点具有相同的X值,则按Y值降序排序(这只应发生在具有X分量Xmin的点上)
  • 将两个列表附加在一起(哪一个是第一个并不重要)

  • 另请参见:仅供参考:绝对不需要使用反向触发函数对点进行径向排序。您只需根据实际值(y-y0)/(x-x0)进行排序即可.这是格雷厄姆的核心scan@Foo巴哈:谢谢你指出这一点。从你的答案中不清楚。顺便说一句,你对答案投了反对票吗?如果是的话,你为什么要编辑它?我编辑它是因为我想撤销我的反对票,但后来忘了这么做。我现在已经删除了。好主意!
    A _____ B
      |   |
      |   |
      |   |
      |   |
      |___|
    C       D