Geometry 从多边形中减去矩形

Geometry 从多边形中减去矩形,geometry,computational-geometry,Geometry,Computational Geometry,我正在寻找一种算法,它将从一个简单的凹多边形中减去一个矩形,然后返回剩余的多边形。如果矩形包围多边形,则余数为空。在大多数情况下,看起来矩形和多边形之间至少会共享一条边 我一直在网上搜寻,但没有找到好的线索 有人能给我指出正确的方向吗?这很简单:找到矩形和简单多边形边之间的交点,然后在那里切割线段。这不需要空间搜索结构,因为多边形的4条边是常数因子,因此在线性时间内运行 然后计算所有线段的约束Delaunay三角剖分,并使用种子点来生长区域。适当地组合区域(简单多边形内部的三角形减去矩形内部的三

我正在寻找一种算法,它将从一个简单的凹多边形中减去一个矩形,然后返回剩余的多边形。如果矩形包围多边形,则余数为空。在大多数情况下,看起来矩形和多边形之间至少会共享一条边

我一直在网上搜寻,但没有找到好的线索


有人能给我指出正确的方向吗?

这很简单:找到矩形和简单多边形边之间的交点,然后在那里切割线段。这不需要空间搜索结构,因为多边形的4条边是常数因子,因此在线性时间内运行

然后计算所有线段的约束Delaunay三角剖分,并使用种子点来生长区域。适当地组合区域(简单多边形内部的三角形减去矩形内部的三角形减去外部的三角形。剩余的三角形是结果,边界边是结果多边形的边

编辑:如果答案太短,我很抱歉。下图显示了这个想法。
a) 两个输入多边形
b) 插入(切割)段后的CDT
c) 生长区
d) 绿色区域减去红色区域
e) d区域的边界边


我试着回答。我对你的回答没有批评,但我发现用铅笔和纸可以更好地解释这些问题……因为我的矩形至少有一条边与多边形共线。我应该先合并这些边吗?既然我使用的是面向对象编程,我应该把点结构升级到跟踪边的顶点类中吗?另外,我对计算几何知之甚少。你能把Delaunay将如何帮助的图表放出来吗?我已经添加了一张图片。是否需要合并重复边取决于您使用的库。@user1684383我最终编写了自己的函数集,而不是使用库。它工作得很好。谢谢。另外,我没有用德洛奈。但我喜欢你的方式。这可能比我做的更好。