给定一个带洞的2D三角网格(.obj),我想通过一条折线(如下图中的红色曲线)来切割网格,以产生两个单独的网格。额外的信息是,这条折线是开放曲线。这里有什么算法可以做到这一点吗?我尝试在谷歌上搜索这个问题,但我只找到了通过单线或平面切割网格的方法。
我使用了CGAL的AABB树和Polyhedron数据结构,做了类似于您刚才提出的问题的事情。但是,我必须自己解决实际的剪切,即创建新顶点、添加新边缘等问题(或者是我的队友)。而CGAL库非常方便用于此操作。基本方法是使用AABB树来确定线(或折线集)与网格之间的所有交点。您可以从CGAL中按特定顺序获取这些交点。然后,您一个接一个地沿着它们走,添加新的边缘和顶点。通常只需要在起始点和终止点处添加新顶点。CGAL Polyhedron API支持沿边将多边形分割,您可以在遍历结果集时使用它。在内部,它使用半边数据结构,支持这些操作。