【问题标题】:How to cut a 2D triangle mesh by a polyline?如何通过折线切割二维三角形网格?
【发布时间】:2015-07-24 05:38:20
【问题描述】:

给定一个带孔的 2D 三角形网格 (.obj), 我想用折线切割网格(如下图中的红色曲线)以生成两个单独的网格。

作为附加信息,折线是开放曲线。

有什么算法可以做到这一点吗?

我试图用谷歌搜索这个问题,但我只发现了单线或平面切割网格。

【问题讨论】:

    标签: c++ graphics geometry 2d


    【解决方案1】:

    我已经使用了 CGAL 的 AABB treePolyhedron 数据结构来执行与您刚才询问的类似的事情。但我必须进行实际的切割创建新顶点、添加新边等,这些都是我(或我的队友)想出来的。 CGAL 库在这方面非常方便。

    基本方法是使用 AABB 树来计算线(或线集,如果是折线)和网格之间的所有交点。您将能够以特定顺序从 CGAL 获取交叉点。然后你一个接一个地沿着它们走,添加新的边和顶点。通常,您不必添加新顶点,除非在起点和终点。

    CGAL Polyhedron API 支持沿边划分多边形,您可以在沿着结果集行走时使用它。在内部,它使用half edge 数据结构,从一开始就支持这些操作。

    【讨论】:

    • 你能用 CGAL 来检测一个边是在三角形里面,外面,还是在边界上?
    • CGAL 的 AABB 数据存储。将给出与折线相交的面列表。此外,它还可以提供精确的交点。点列表将与面列表一对一匹配。所以你应该能够弄清楚边缘(连接点)的确切位置。请查看 API 文档了解更多信息。
    • 嗯,是的,我认为这是可行的,谢谢。但我注意到 CGAL 中的 AABB 树只有 3D,仅供参考,我的三角形网格是 2D
    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2014-11-07
    • 2011-10-03
    • 2020-12-15
    相关资源
    最近更新 更多