顺时针(逆)排序CONCAVE多边形顶点?

时间:2013-11-22 09:53:19

标签: python algorithm

我有一组无序顶点,可能会形成凹多边形。现在我希望顺时针或逆时针订购它们。

An answer here建议采取以下步骤:

  • 找到多边形中心
  • 计算角度
  • 按角度订购点

这显然仅适用于凸多边形,并且当这些点形成凹面时会失败。

我怎么能这样做呢?

我正在使用Python,但欢迎所有通用答案。

1 个答案:

答案 0 :(得分:10)

一般来说,你的问题似乎不明确。例如,给定以下顶点集:

Four points on the plane in a non-convex arrangement

您认为哪些非凸多边形是连接它们的“正确”方式?

Polygon ABCD  Polygon ACDB  Polygon ACBD

现在,显然,您可以使用各种可能的标准来选择不同的可能订单。例如,您可能希望选择最小化边长的顺序,如果这些点确实产生相当“合理”的结果,实际上它们在简单多边形的边界:

Simple non-convex polygon with many vertices

不幸的是,对于一组通用点,找到最小化总边长的排序结果为a well known NP-complete problem。也就是说,有许多heuristic algorithms可以通常快速找到几乎最佳解决方案,即使他们无法始终保证他们找到的解决方案是真正的最低限度。