我遇到的问题与此处相同:how to order vertices in a simple, non-convex polygon 但我没有可以使用的解决方案。
我有点的坐标,需要找到一些多边形。对于一个点列表有更多解决方案并不重要。我需要一些算法来找到其中一个。无论哪一个。我真的不知道如何解决这个问题。
(我在数组中存储了坐标,我想在Javascript中使用一些算法)
非常感谢。
答案 0 :(得分:12)
首先,找到包含所有顶点的边界框的中心。我们将这一点称为C。
根据每个点相对于C的角度对顶点列表进行排序。您可以使用atan2
(point.y - C.y, point.x - C.x)
来查找角度。如果两个或多个顶点具有相同的角度,则应该首先接近C的顶点。
然后,按照它们在列表中出现的顺序绘制您的点。你将得到一个非交叉的星爆图案,可能是非凸的。例如: