平移一个凹面多边形以适合另一个凹面

时间:2019-05-29 14:38:03

标签: computational-geometry

我需要一种快速而强大的方法来将一个凹面多边形拟合到另一个凹面多边形中。

多边形以点列表的形式显示。 零位旋转或缩放均允许。仅翻译。而且我也不是在寻找寻找最佳位置的算法。

在“快速”一词下,我认为计算复杂度。我猜想,假设调整后的多边形具有N个顶点,而目标一个包含M个顶点,那么适用于O(M * N)的算法将是一个不错的选择。

还是无法访问?

任何想法或复杂程度更高的证据都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

好吧,最后dyukhacomment非常有用。

  1. 对于调整后的多边形中的每个顶点,您必须找到使该顶点适合目标多边形的向量集。实际上,这组向量可以在表面上表示为:通过该顶点的坐标移动的目标多边形

  2. 接下来要做的就是找到所有这些多边形的交点。为此,我使用了Clipper库。然后,从相交集中选择任意点,并通过其坐标平移调整后的多边形。

该算法的复杂度约为:O(N M log(M))(假设我们不在乎平移集多边形之间的交点数)

高级:此外,您可以使用相同的算法将多边形最优地拟合到另一个多边形中(以cutting stock problem表示)。只需迭代有趣的旋转角度(就我而言,我只使用了多边形边缘之间的所有可能角度),将上述算法应用于所有旋转图形,然后从所有可能的平移中选择一个将调整后的多边形的重心移至距目标最远的位置多边形的重心。

希望可以帮助任何人!

修改:忘记提及。拟合顶点不能保证边不会交叉。因此,在第二步中,应选择不会导致调整后的多边形的边缘与目标轮廓的边缘相交的平移向量。

在我的解决方案中,我比较了两个多边形的相交平方和目标轮廓的平方。如果它们相等,则不在乎。否则请选择另一点。

当然,这会稍微检查破坏性能,但是在找到多边形的最佳位置时并没有太大意义。据我的经验说:)。

感谢Yves Daoust的修改。