如何用折线剪切2D三角网格?

4
给定一个带洞的2D三角网格(.obj),我想通过一条折线(如下图中的红色曲线)来切割网格,以产生两个单独的网格。
额外的信息是,这条折线是开放曲线。
这里有什么算法可以做到这一点吗?
我尝试在谷歌上搜索这个问题,但我只找到了通过单线或平面切割网格的方法。
1个回答

3
我使用了CGAL的AABB树Polyhedron数据结构,做了类似于您刚才提出的问题的事情。但是,我必须自己解决实际的剪切,即创建新顶点、添加新边缘等问题(或者是我的队友)。而CGAL库非常方便用于此操作。
基本方法是使用AABB树来确定线(或折线集)与网格之间的所有交点。您可以从CGAL中按特定顺序获取这些交点。然后,您一个接一个地沿着它们走,添加新的边缘和顶点。通常只需要在起始点和终止点处添加新顶点。
CGAL Polyhedron API支持沿边将多边形分割,您可以在遍历结果集时使用它。在内部,它使用半边数据结构,支持这些操作。

你可以使用CGAL来检测边是否在三角形内部、外部或者在边界上。 - azer89
CGAL的AABB数据结构将提供与折线相交的面列表。此外,它还可以提供交点的精确位置。点列表将与面列表一一对应。因此,您应该能够确定边缘(连接点的边)的确切位置。请查看API文档以获取更多信息。 - Arun R
嗯,是的,我认为这是可行的,谢谢。 但是我注意到CGAL中的AABB树仅适用于3D,顺便提一下,我的三角网格是2D的。 - azer89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接