坐标 Python

分享于2022年07月17日 arrays coordinates numpy python sorting 问答
【问题标题】:坐标 Python(Coordinates Python)
【发布时间】:2022-01-27 05:35:31
【问题描述】:

我正面临着排序坐标。特别是给定一组未排序的坐标,我必须从后缘上表面开始对它们进行排序。

  • 它看起来像数值不稳定,可能是由于三角函数对于接近有振荡的值不准确。可能无法精确计算目标值的角度(例如, r 非常接近 0)。

【解决方案1】:

问题来自算法本身:它仅在点形成 多边形时才有效。但是,形状是 凹形

更具体地说,第一个排序点(和最后一个点)形成锯齿形线,因为有两组点(绿色箭头)与中点(红线)的增长角度(红色箭头)交错。

Coordinates Python

请注意,这些点在问题的收集点上水平翻转。因此这些点按顺时针方向排序。

一个简单的解决方案是将形状水平拆分为多组点(例如 10 组),使每组点形成一个凸形。然后,可以合并零件以形成最终形状。合并包括在每个局部排序的点集(部分)的“边缘”处找到点,然后重新排序部分排序的点数组。

更具体地说,每个部分的点分为 2 个子集:上部分和下部分。您可以通过选择右侧部分最左侧的 2 个点和左侧部分的最右侧点轻松找到它们。最上面的 2 个点需要相互连接,最下面的 2 个点也需要相互连接。因此,需要对上面两组点的顺序进行重新排序,使它们是连续的,并且对于下面的部分是相同的。

这是一个例子:

Coordinates Python

Coordinates Python

请注意,如果您不确定如何将点拆分为多个部分,以便每个点形成凸形点集,那么您可以: 拆分 n 部分中的形状,检查点集是否通过计算 convex hull (例如,使用 Graham scan )形成一个凸形,并平均分割凹入的部分(递归)。这是相当昂贵的,但更强大。