用非凸多边形裁剪和三角剖分三角形
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 解决,稍微简化了,因为输入多边形具有恒定大小,并且它们的交点是凸的,更糟糕的是六边形。凸多边形的三角化是直接的。
【讨论】:
以上是关于用非凸多边形裁剪和三角剖分三角形的主要内容,如果未能解决你的问题,请参考以下文章