首页 > 解决方案 > EPECK 和 CGAL::Simple_cartesian 的区别

问题描述

希望有人能给我一些见解,为什么如果我使用 CGAL::Simple_cartesian<CGAL::Gmpq>as Kernel 我的程序可以工作,而如果我使用 as Kernel 它会崩溃CGAL::Exact_predicates_exact_constructions_kernel

问题:我让一个CGAL::polygon_2(菱形)落在另一个多边形(正方形)上。如果我使用内核,一旦菱形多边形的尖端接触到正方形,程序就会在调用期间崩溃do_intersect(diamond,square)(可能是堆栈溢出) 。EPECK我的理解是,这应该始终有效,因为它是准确的,我认为因为它不构成我什至应该能够使用的构造CGAL::Exact_predicates_inexact_constructions_kernel

它似乎开始在通话时图像中的蓝色标记栏开始循环:BOOST_PP_REPEAT_FROM_TO(2, 9, CGAL_LAZY_REP, _)

堆栈跟踪的一小部分

解决方案:如果我用它替换 EPECKCGAL::Simple_cartesian<CGAL::Gmpq>就可以了。

我愿意将其用作解决方案,但我想确定它实际上是解决方案,而不是我进一步遇到问题。还有一些理解会很好,为什么会出现问题,因为我认为 CGAL 应该能够处理这个问题,EPECK即使它可能是一个退化的情况。

附加信息:我在 3 台计算机上构建了它,有 2 个 MSVC 编译器版本和 2 个 CGAL 版本,结果都可比较。

标签: c++cgal

解决方案


推荐阅读