用平面切割网格的算法

Algorithm for cutting mesh with the plane

我正在尝试编写一种算法,用于使用给定平面(用平面上的点和单位法向量定义的平面)切割镶嵌网格。此外,该算法应该对所有多边形进行三角剖分并在拆分后填充孔。 我遇到了一个问题,要找到位于平面上的多边形(如图像上的橙色平面)

我尝试处理所有三角形的所有边并找到位于平面上的边并将它们存储在数组中。之后,我通过搜索下一个合适的边形成了一个顶点数组。

谁能解释一下找到这个多边形的更简单快捷的方法?
所有顶点必须按 CCW 顺序存储。

通过端点的索引(或标签)识别您切割的所有边。确保每条边都属于两个面并且被切割两次。还要确保将相交产生的边的方向与面法线的方向一致。

现在相交边形成一个链,您可以通过排序重建该链:分别存储端点的索引,每个端点的索引都带有 link 到原始边。对索引进行排序后,公共顶点将成对出现在排序后的数组中。使用此结构,您可以跟踪多边形。

在下面的示例中,您从面 aebf、bcgf、cdgh 和 dhea 中生成边 ae-dh、bf-ae、cg-bf 和 dh-cg命令。拆分端点排序后,ae-,-ae,dh-,-dh,cg-,-cg,bf-,-bf,生成循环ae-dh,dh-cg,cg-bf, bf-ae.