Python 将两个凸的不相交多边形合并为一个多边形
我需要将两个凸的、不相交的多边形连接成一个连接的凹多边形,以最小化生成的面积,如下图所示:我正在寻找一个alhorithm这样做。如果有人向我提供相应的python实现,我也将不胜感激。如果有两个不相交的多边形分别具有m和n个顶点,那么您的问题可以这样考虑: 求包含所有m+n点的最小面积的凸多边形。说到这里,请查看Python 将两个凸的不相交多边形合并为一个多边形,python,computational-geometry,Python,Computational Geometry,我需要将两个凸的、不相交的多边形连接成一个连接的凹多边形,以最小化生成的面积,如下图所示:我正在寻找一个alhorithm这样做。如果有人向我提供相应的python实现,我也将不胜感激。如果有两个不相交的多边形分别具有m和n个顶点,那么您的问题可以这样考虑: 求包含所有m+n点的最小面积的凸多边形。说到这里,请查看QuickHull算法: 此外,您还可以查看这些算法 贾维斯算法: 格雷厄姆扫描: 希望这有帮助 另外,我想你可以在互联网上的任何地方找到这些算法的python实现。:) 找到这两个集
QuickHull算法
:
此外,您还可以查看这些算法
贾维斯算法:
格雷厄姆扫描:
希望这有帮助
另外,我想你可以在互联网上的任何地方找到这些算法的python实现。:) 找到这两个集合的凸包将起作用,但以下方法可能更快,因为它只需要按顺序访问多边形顶点:
p
和Q
,从每个多边形中拾取一个顶点p1
和q1
Q
中搜索与q1
相邻的顶点q2
,以便从p1-q1
到p1-q2
的旋转为顺时针方向(可以使用向量叉积轻松检查)p1
移动过程,使旋转逆时针,直到再次找到极端的pl
pm
和pn
,这两个点是红色区域的一侧与上面图形中的黑色多边形相交的两个顶点为了获得有效的解决方案,可以对单调链方法()进行如下调整:
- 对于这两个多边形,找到最左边和最右边的位置(如果是并列位置,则分别使用最高/最低的位置)
- 这些站点将多边形拆分为两条链,按X排序
- 通过X上的比较合并两个上链和两个下链(这是mergesort的过程)
- 使用与单调链法(格雷厄姆步行法的一种变体)相同的程序,从上链和下链拒绝反射部位
- n+m比较,找出极端位置
- 合并的n+m比较
- n+m+2h测试(有符号区域;h是结果的顶点数)
最后一句话:如果您将所有多边形保持为两个单调链的串联,则可以省去上述过程的第一步。这些建议没有利用点已经组织在两个独立的凸包中这一事实。有什么可能的方法可以做到这一点?请检查我的答案。使用两个多边形而不是顶点批量意味着它们被排序了。所以你可以省去排序步骤(用简单的合并进行交易)。我想是这样的。