【发布时间】:2020-12-05 22:23:16
【问题描述】:
我已经看到了几种“多边形裁剪”的实现,它们允许您从另一个多边形中“减去”一个多边形,但我正在寻找一些不同的东西。
如何通过从每个多边形中减去一个偶数来剪裁两个多边形,使它们不再重叠?
例如在下图中,粉色和红色的多边形是重叠的。我想将它们都沿红线切开,这样它们就不再重叠了。
我用手在十字路口的中心画了红线。它应该与任一侧的 [intersection] 多边形的边缘等距。我相信这也意味着左右两半的面积相等。
多边形不一定是凸的。它们是用户绘制的,因此它们可以是凹形的,但不会有孔。从技术上讲,它们可以自相交,但我可能应该找到另一种算法来清理或丢弃那些。
我希望这已经足够清楚了。这个算法有名字吗?如果它在 JS 中有一个实现,那就更好了。
到目前为止我的最佳想法是:
- 计算两个多边形的交集,使用其中之一
- 马丁内斯-鲁埃达-费托
- 萨瑟兰-霍奇曼
- Weiler-Atherton 裁剪算法
- Vatti 裁剪算法
- 计算“中心线”(还没有弄清楚)
- 再次使用多边形剪裁从每个多边形中剪掉一半
【问题讨论】:
-
@mrmcgreg 不确定我可以在这里申请 voronoi。
-
您的问题似乎与中轴变换有关,尽管后者不一定由线段组成。
-
@YvesDaoust 啊哈!谢谢你给我一个搜索词。这看起来很相关:stackoverflow.com/a/52796778/65387 我认为它比这更复杂,因为中轴需要连接到两个多边形相交的点。
-
是的,你的问题很难。 (标准的多边形裁剪已经很麻烦了。)
标签: javascript algorithm polygon computational-geometry