【发布时间】:2015-07-24 05:38:20
【问题描述】:
给定一个带孔的 2D 三角形网格 (.obj), 我想用折线切割网格(如下图中的红色曲线)以生成两个单独的网格。
作为附加信息,折线是开放曲线。
有什么算法可以做到这一点吗?
我试图用谷歌搜索这个问题,但我只发现了单线或平面切割网格。
【问题讨论】:
给定一个带孔的 2D 三角形网格 (.obj), 我想用折线切割网格(如下图中的红色曲线)以生成两个单独的网格。
作为附加信息,折线是开放曲线。
有什么算法可以做到这一点吗?
我试图用谷歌搜索这个问题,但我只发现了单线或平面切割网格。
【问题讨论】:
我已经使用了 CGAL 的 AABB tree 和 Polyhedron 数据结构来执行与您刚才询问的类似的事情。但我必须进行实际的切割即创建新顶点、添加新边等,这些都是我(或我的队友)想出来的。 CGAL 库在这方面非常方便。
基本方法是使用 AABB 树来计算线(或线集,如果是折线)和网格之间的所有交点。您将能够以特定顺序从 CGAL 获取交叉点。然后你一个接一个地沿着它们走,添加新的边和顶点。通常,您不必添加新顶点,除非在起点和终点。
CGAL Polyhedron API 支持沿边划分多边形,您可以在沿着结果集行走时使用它。在内部,它使用half edge 数据结构,从一开始就支持这些操作。
【讨论】: