如何在CGAL的Delaunay三角剖分中获得一致执行结果?
解决CGAL 3D Delaunay三角剖分结果不一致的问题
要让每次执行得到一致的Delaunay三角剖分结果,你可以从以下几个方面入手:
固定点的插入顺序
如果M.points()返回的点集顺序存在随机性(比如来自未排序的动态数据源),插入顺序的差异会直接导致剖分结果不同。先将点复制到固定顺序的容器中,再执行插入操作:std::vector<K::Point_3> fixed_points(M.points().begin(), M.points().end()); // 可选:对点按坐标排序,确保绝对固定的插入顺序 std::sort(fixed_points.begin(), fixed_points.end()); dt.insert(fixed_points.begin(), fixed_points.end());设置固定的随机种子
CGAL在处理退化情况(如共面、共球点)时,可能会用随机化逻辑打破平局。在程序启动阶段设置全局随机种子,让这些随机选择保持一致:CGAL::set_random_seed(42); // 可选择任意固定数值作为种子处理退化点集的确定性剖分
如果你的点集存在退化情况,默认剖分逻辑可能产生不同结果。可以通过自定义Traits类,指定确定性的平局打破规则(比如基于点坐标的字典序优先选择面/边),确保每次处理退化场景时采用相同的剖分逻辑。
内容的提问来源于stack exchange,提问作者WooLyung
相关产品推荐
相关产品推荐

