用非凸多边形裁剪和三角化三角形

Clipping and triangulating a triangle with a non convex polygon

我从一个 2D 三角形开始,我想用(可能)凸 2D 多边形对其进行裁剪。它不是自相交的,但可能'keep'或'discard'相交区域基于缠绕顺序。

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

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

如果我没看错,你想在多边形内部进行裁剪,即得到三角形和多边形的交点。

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

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

找到交点后,您 re-triangulate 使用 ear-clipping 方法或更有效的方法 (https://en.wikipedia.org/wiki/Polygon_triangulation)。


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

triangle-triangle 裁剪问题再次用 Sutherland-Hodgman 解决,由于输入多边形具有恒定大小,并且它们的交点是凸的,更糟糕​​的是六边形,因此有所简化。立即对凸多边形进行三角剖分。