假设我在二维空间中有4个顶点。 有没有一种有效的算法可以给我一个顶点的排序,该排序对应于简单四边形?也就是说,它将标记顶点1、2、3、4,以便如果我遵循1-2、2-3、3-4,我将跟踪一个简单(即非交叉)四边形。只需提供我可以Google的标准算法的名称即可。
如果你的形状是凸的,你可以按照绕过你的点的重心(即重心或“平均值”)的曲线顺序进行操作:
B = (X_1 + X_2 + X_3 + X_4) / 4
每个顶点的两个坐标要么在重心对应坐标的上方,要么在下方:
(-,+) (+,+)
X X
B
X
(-,-) X
(+,-)
因此,从任何一个点开始,只需移动到一个点,其中仅更改两个符号中的一个,而不是两个都更改。
如果您的形状不是凸形的,则可以首先通过内部边缘对其进行三角剖分,为每个三角形应用具有一致方向的顶点排序,然后通过取消成对相反内部来合并边缘。
请注意,对于非凸点集(即包含在该点集的凸包开放内部中的一个点),可能会有多个四边形具有这些点作为顶点(考虑连接内部顶点到两个外部顶点的所有方式)。