我使用Constrained_triangulation_plus_2
创建了二维三角剖分。我正在为地理区域添加来自矢量数据的许多约束。问题是后来当我从这个三角剖分中创建Surface_mesh
时,我想出了共线面(检查三角剖面没有显示共线面)。
我试图通过使用Delaunay_mesher_2
:
mesher.set_criteria(Criteria(0.125,edge_max_length));
mesher.refine_mesh();
这将给我以下运行时异常:
CGAL error: assertion violation!
Expression : n == zone.fh
File : ../CGAL-4.8/include/CGAL/Mesh_2/Refine_edges.h
Line : 447
Explanation:
Refer to the bug-reporting instructions at http://www.cgal.org/bug_report.html
libc++abi.dylib: terminating with uncaught exception of type CGAL::Assertion_exception: CGAL ERROR: assertion violation!
Expr: n == zone.fh
File: ../CGAL-4.8/include/CGAL/Mesh_2/Refine_edges.h
Line: 447
我无法真正理解Refine_edges.h
中发生的事情,尽管我猜这与共线面孔有关。我甚至尝试了mesher.step_by_step_refine_mesh()
函数进行了一些迭代,但是并没有修复那些非常小的三角形。
然后我尝试从三角剖分中删除小三角形,但是其中一些至少有一个约束边缘,所以这也是不可能的,如果边缘受到限制,我也找不到修改方法,或者即使我这样做,也会打破我三角测量的约束区域。
我还尝试在使用像PS::simplify(cdtp, Cost(), Stop(1e-5))
这样的调用之前简化三角测量,但这似乎并没有解决错误。
所以,我的问题是如何修改三角测量以使refine_mesh()
不会遇到问题?我目前正在使用Exact_predicates_inexact_constructions_kernel
。我也尝试使用精确的内核,在这种情况下我没有得到运行时错误,但精简函数需要永远。