[英]find the outline of adjacent polygons
我正在寻找一种方法来找到两个相邻多边形的轮廓。
多边形由多边形中出现的点列表定义。 在我的用例中,没有重叠的多边形,多边形之间没有间隙,并且没有带有“洞”的多边形。
我想计算两个多边形的轮廓,没有任何“洞”。 这些图片显示了预期的结果。
我知道有很多用于剪裁多边形的库,但是对于它们中的大多数而言,性能不是很好,因为它们适用于任何类型的多边形(具有孔,重叠多边形等)。 在我的用例中,算法必须实时处理许多多边形(> 20.000)。 我怎样才能最有效地计算轮廓?
特定
没有重叠的多边形,多边形之间没有间隙,也没有带“洞”的多边形
以下算法应该可以解决问题。
丢弃重复的线段。
计算剩下的自然组合嵌入作为双重连接边列表 。 每个区段产生两个节点(半边,彼此反转,其中一个端点是头部(分别是尾部),另一个端部是尾部(分别是头部)),每个半边连接以逆时针方向使用相同的头到下一半边缘。
提取面部。 组合嵌入中的面是最小的非空半边集,使得对于每个半边e,与e的下一半边的反转在集合中。 该组面是半边的分区。 请参阅下面的ASCII艺术图。
U----V----W | | | | | | Z----Y----X
无限面是{U->Z, Z->Y, Y->X, X->W, W->V, V->U}
。 W->V
的下一半边是U->V
W->V
的下半边的反转是V->U
其他面是{U->V, V->Y, Y->Z, Z->U}
和{V->W, W->X, X->Y, Y->V}
。
通过对有符号的逆时针角度求和并测试符号,仅保留无限面。 像{U->V, V->Y, Y->Z, Z->U}
这样的有限面具有负和
/_UVY - 180 + /_VYZ - 180 + /_YZU - 180 + /_ZUV - 180 = 4 * (90 - 180) = -360.
无限的面孔有正面的总和
/_UZY - 180 + /_ZYX - 180 + /_YXW - 180 + /_XWV - 180 + /_WVU - 180 + /_VUZ - 180 = 4 * (270 - 180) + 2 * (180 - 180) = 360.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.