我目前有点矢量
vector<Point> corners;
我以前存储了给定多边形的角点。鉴于此,我确信这些点形成了一个不包含任何自相交边的简单多边形。但是,在存储这些顶点的过程中,它们彼此连接的顺序不会被保留。
我现在有一个函数,给定一个点矢量,连接它们并绘制一个封闭的数字。但是,我需要按照需要连接的顺序给这个函数一系列点。任何人都可以提出一种方法,我可以按正确的顺序对这些点进行排序吗?它们形成一个非常简单的凹多边形,而不是凸包。在所有(7)点中找到中心点的算法也会有所帮助:)
答案 0 :(得分:10)
凹面多边形没有独特的解决方案:
凸多边形可以像点的凸包一样发现(如果你知道这些点构建一个凸多边形)。
答案 1 :(得分:8)
一组给定的点通常可以通过多种方式连接在一起以形成非自相交的多边形。除非您有关于点可能代表的多边形种类的更多信息,否则您可能会失败。
答案 2 :(得分:7)
没有独特的解决方案,因此没有简单的算法。你可以试着模仿你的直觉。
这两种方法一般都不起作用,甚至不能保证避免交叉。您可以尝试通过回溯来解决这个问题,如果您发现了明显的错误(例如交叉路口),那么回溯到最后的决策点并采用“次优”方法,......
但是,由于解决方案并非独一无二,所以不要期望这些启发式方法过多。
顶点的平均点很容易计算。只需将所有点加在一起,然后除以刚刚添加的点数,这就是平均值。您可能更感兴趣的是“质心”意义上的中心点,见下文。
要确定质心,首先必须定义形状。这意味着您必须执行类似步骤1的操作。
给定多边形计算中心点的一种易于实现的方法是。