用非凸多边形裁剪和三角剖分三角形

Posted

技术标签:

【中文标题】用非凸多边形裁剪和三角剖分三角形【英文标题】:Clipping and triangulating a triangle with a non convex polygon 【发布时间】:2018-08-22 23:48:18 【问题描述】:

我从一个 2D 三角形开始,我想用一个(可能)凸的 2D 多边形来剪辑它。它不是自相交的,但可以根据缠绕顺序“保留”或“丢弃”相交区域。

我想以三角剖分结束,即二维空间中裁剪区域的n 顶点和m 三角形列表,每个三角形由 3 个顶点定义。

什么是最简单的(对于我作为开发人员而言),以及最快(在计算方面)实现这一目标的方法是什么?

【问题讨论】:

请解释您的反对意见/关闭原因。如果问题是主观上“最简单”的问题,我很乐意将其删除。 【参考方案1】:

如果我是对的,你想在多边形内部进行剪辑,即得到三角形和多边形之间的交点。

由于三角形是凸形,所以 Sutherland-Hodgman 算法是合适的,实现起来并不困难 (https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)。

请注意,如果交叉点不是简单连接的,则生成的多边形将是连接的,双边将连接可能的部分。可能需要进行一些清理。

找到交叉点后,您可以使用剪耳法或更有效的方法 (https://en.wikipedia.org/wiki/Polygon_triangulation) 重新进行三角测量。


或者,您可以对多边形进行三角剖分,并使用原始三角形对每个三角形进行剪裁。

三角形-三角形裁剪问题再次用 Sutherland-Hodgman 解决,稍微简化了,因为输入多边形具有恒定大小,并且它们的交点是凸的,更糟糕​​的是六边形。凸多边形的三角化是直接的。

【讨论】:

以上是关于用非凸多边形裁剪和三角剖分三角形的主要内容,如果未能解决你的问题,请参考以下文章

凸多边形的三角剖分

细分和三角剖分多边形

区间DP之凸多边形的三角剖分

带洞多边形三角剖分

1039. 多边形三角剖分的最低得分

从 Delaunay 三角剖分计算 alpha 形状的边界多边形