如何在非凸多边形中排序顶点(如何找到许多解中的一个)

时间:2013-10-31 17:31:35

标签: algorithm polygon points non-convex

我遇到的问题与此处相同:how to order vertices in a simple, non-convex polygon 但我没有可以使用的解决方案。

我有点的坐标,需要找到一些多边形。对于一个点列表有更多解决方案并不重要。我需要一些算法来找到其中一个。无论哪一个。我真的不知道如何解决这个问题。

(我在数组中存储了坐标,我想在Javascript中使用一些算法)

非常感谢。

1 个答案:

答案 0 :(得分:12)

首先,找到包含所有顶点的边界框的中心。我们将这一点称为C。

根据每个点相对于C的角度对顶点列表进行排序。您可以使用atan2 (point.y - C.y, point.x - C.x)来查找角度。如果两个或多个顶点具有相同的角度,则应该首先接近C的顶点。

然后,按照它们在列表中出现的顺序绘制您的点。你将得到一个非交叉的星爆图案,可能是非凸的。例如:

100 points randomly placed on a 400x400 pixel square