【问题标题】:Cutting an open Polyhedron3 with another open Polyhedron3用另一个开放的多面体 3 切割一个开放的多面体 3
【发布时间】:2014-09-16 04:22:55
【问题描述】:

在 CGAL 中给定 2 个由三角形组成的开放 Polyhedron3,我想用第二个切割第一个。也就是说,poly2 中的所有相交三角形面都应该从 poly1 中切割面,并在 poly1 中沿着相交路径创建新的边(和面)。最后,我需要作为交叉路径一部分的边/半边列表。

我正在使用 typedef CGAL::Simple_cartesian 内核。

虽然这看起来像是一个布尔运算,但这并不是因为开放网格没有“内部”或“外部”。我尝试实现它的方式是:

  • 为网格 1(待切割)构建 AABB
  • 从被网格 2 的第一个三角形切割的网格 1 中查找相交面
  • 使用 cgal 计算交叉点信息:这将返回交叉点描述,但存在一些问题:

    1. cgal 有时会返回“错误”的交叉点(例如,长度为 0 的段)
    2. 操作中未切割第一个网格。鉴于交叉点的描述,我必须自己切割三角形(除非我在 cgal 中忽略了一个函数来切割给定交叉点的面/三角形)。这不是一个小问题,因为有很多极端情况
    3. 重复 poly2 的下一个面

我的算法有点工作,但我有时会遇到问题:路径不闭合,数值精度小问题,而且速度不是很快。

所以这是(最后)我的问题:以稳健的方式实施此类操作的推荐方法是什么?你会推荐哪个内核?

【问题讨论】:

  • 尝试编译并运行 Polyhedron 演示。有一个名为 corefinement 的插件可以做你想做的事。调用插件前需要点击A/B栏设置A和B。然后右键单击生成的对象将让您提取您感兴趣的部分。
  • 您好,非常感谢!我马上试试这个。如果它解决了我的问题,我会在这里发布结果:-)

标签: cgal


【解决方案1】:

在 sloriot 评论之后,我花了一些时间玩 CGAL 多面体演示的代码。事实上,它包含一个插件核心优化,可以满足我的需求。我尚未将所有更改集成到我自己的代码库中,但我相信我可以将此问题标记为已回答。

感谢 SLoriot 的建议!

帕斯卡

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多