Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按(逆)顺时针方向排列凹多边形顶点?_Python_Algorithm - Fatal编程技术网

Python 按(逆)顺时针方向排列凹多边形顶点?

Python 按(逆)顺时针方向排列凹多边形顶点?,python,algorithm,Python,Algorithm,我有一组无序的顶点,可以形成一个凹多边形。现在我想顺时针或逆时针排列 建议采取以下步骤: 找到多边形中心 计算角度 按角度排序点 这显然只适用于凸多边形,当点形成凹多边形时将失败 我该如何处理凹面的 我正在使用Python,但欢迎所有通用答案。一般来说,您的问题似乎定义不清。例如,给定以下一组顶点: 哪些非凸多边形是连接它们的“正确”方式? 现在,很明显,您可以使用各种可能的标准在不同的可能订单之间进行选择。例如,您可能希望选择使边的总长度最小化的排序,如果点实际上在简单多边形的边界上

我有一组无序的顶点,可以形成一个凹多边形。现在我想顺时针或逆时针排列

建议采取以下步骤:

  • 找到多边形中心
  • 计算角度
  • 按角度排序点
这显然只适用于凸多边形,当点形成凹多边形时将失败

我该如何处理凹面的


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

一般来说,您的问题似乎定义不清。例如,给定以下一组顶点:

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

现在,很明显,您可以使用各种可能的标准在不同的可能订单之间进行选择。例如,您可能希望选择使边的总长度最小化的排序,如果点实际上在简单多边形的边界上彼此非常接近,则应产生相当“合理”的结果:


不幸的是,对于一般的点集,找到使总边长度最小化的顺序是非常困难的。也就是说,有很多人通常可以快速找到接近最优的解决方案,即使他们不能始终保证他们找到的解决方案是真正的最小值。

在搜索一个算法来找到一组点的凹壳时,你发现了什么?一旦你有了这些点,在它们周围走动应该很容易编程。@HighPerformanceMark我想你指的是alpha形状。是的,我已经研究过了,但遇到了问题,因此无法继续。我认为在讨论一般凹多边形的顶点时,顺时针和逆时针顺序没有任何意义。@martineau但是为了工作,必须先对顶点排序,然后再执行它。事实上我也有同样的感觉,但我不知道如果他们像这样杂乱无章该怎么办。ypu可以提供建议吗?这些点可以以多种方式排序——所有这些点都可以创建不同类型的有效多边形(包括具有自相交边的多边形)。例如,我能想到的另一个排序是选择最近的相邻点。这可以进一步限制为不与现有边相交的最近边。可能会变得非常缓慢,就像试图解决旅行推销员的最短路径问题。