给定带有孔的2D三角形网格(.obj), 我想通过折线(如下图中的红色曲线)剪切网格,以生成两个单独的网格。
作为附加信息,折线是开放曲线。
有没有算法可以做到这一点?
我试图谷歌这个问题,但我只发现了一条线或一架飞机的网格切割。
答案 0 :(得分:2)
我已经使用了CGAL的AABB tree和Polyhedron数据结构,做了类似于你刚问的事情。但我必须做实际的切割即创建新的顶点,添加新的边缘等,这些都是我(或我的队友)想出来的。 CGAL库为这样做非常方便。
基本方法是使用AABB树来计算线(或线条组,如果是折线)和网格之间的所有交点。您将能够从CGAL以特定顺序获取交叉点。然后你一个接一个地沿着它们走,添加新的边和顶点。通常,除了起点和终点之外,您不必添加新顶点。
CGAL Polyhedron API支持沿着边缘分割多边形,您可以在沿着结果集行走时使用这些多边形。在内部,它使用half edge数据结构,从get go开始支持这些操作。