【发布时间】:2022-01-27 05:35:31
【问题描述】:
我正面临着排序坐标。特别是给定一组未排序的坐标,我必须从后缘上表面开始对它们进行排序。
-
它看起来像数值不稳定,可能是由于三角函数对于接近有振荡的值不准确。可能无法精确计算目标值的角度(例如,
r
非常接近 0)。
我正面临着排序坐标。特别是给定一组未排序的坐标,我必须从后缘上表面开始对它们进行排序。
r
非常接近 0)。
问题来自算法本身:它仅在点形成 凸 多边形时才有效。但是,形状是 凹形 。
更具体地说,第一个排序点(和最后一个点)形成锯齿形线,因为有两组点(绿色箭头)与中点(红线)的增长角度(红色箭头)交错。
请注意,这些点在问题的收集点上水平翻转。因此这些点按顺时针方向排序。
一个简单的解决方案是将形状水平拆分为多组点(例如 10 组),使每组点形成一个凸形。然后,可以合并零件以形成最终形状。合并包括在每个局部排序的点集(部分)的“边缘”处找到点,然后重新排序部分排序的点数组。
更具体地说,每个部分的点分为 2 个子集:上部分和下部分。您可以通过选择右侧部分最左侧的 2 个点和左侧部分的最右侧点轻松找到它们。最上面的 2 个点需要相互连接,最下面的 2 个点也需要相互连接。因此,需要对上面两组点的顺序进行重新排序,使它们是连续的,并且对于下面的部分是相同的。
这是一个例子:
请注意,如果您不确定如何将点拆分为多个部分,以便每个点形成凸形点集,那么您可以: 拆分
n
部分中的形状,检查点集是否通过计算
convex hull
(例如,使用
Graham scan
)形成一个凸形,并平均分割凹入的部分(递归)。这是相当昂贵的,但更强大。