【发布时间】:2014-09-16 04:22:55
【问题描述】:
在 CGAL 中给定 2 个由三角形组成的开放 Polyhedron3,我想用第二个切割第一个。也就是说,poly2 中的所有相交三角形面都应该从 poly1 中切割面,并在 poly1 中沿着相交路径创建新的边(和面)。最后,我需要作为交叉路径一部分的边/半边列表。
我正在使用 typedef CGAL::Simple_cartesian 内核。
虽然这看起来像是一个布尔运算,但这并不是因为开放网格没有“内部”或“外部”。我尝试实现它的方式是:
- 为网格 1(待切割)构建 AABB
- 从被网格 2 的第一个三角形切割的网格 1 中查找相交面
-
使用 cgal 计算交叉点信息:这将返回交叉点描述,但存在一些问题:
- cgal 有时会返回“错误”的交叉点(例如,长度为 0 的段)
- 操作中未切割第一个网格。鉴于交叉点的描述,我必须自己切割三角形(除非我在 cgal 中忽略了一个函数来切割给定交叉点的面/三角形)。这不是一个小问题,因为有很多极端情况
- 重复 poly2 的下一个面
我的算法有点工作,但我有时会遇到问题:路径不闭合,数值精度小问题,而且速度不是很快。
所以这是(最后)我的问题:以稳健的方式实施此类操作的推荐方法是什么?你会推荐哪个内核?
【问题讨论】:
-
尝试编译并运行 Polyhedron 演示。有一个名为 corefinement 的插件可以做你想做的事。调用插件前需要点击A/B栏设置A和B。然后右键单击生成的对象将让您提取您感兴趣的部分。
-
您好,非常感谢!我马上试试这个。如果它解决了我的问题,我会在这里发布结果:-)
标签: cgal