将一个 Polygon_2 插入到空的 Polygon_Set_2 时,出现以下运行时错误:
Using OpenGL context 4.3 GL
terminate called after throwing an instance of 'CGAL::Precondition_exception'
what(): CGAL ERROR: precondition violation!
Expr: (m_traits.compare_y_at_x_2_object()(p, cv) == EQUAL) && compare_xy(cv.left(), p) == SMALLER && compare_xy(cv.right(), p) == LARGER
File: /path/to/CGAL/include/CGAL/Arr_segment_traits_2.h
Line: 609
进程已完成,退出代码为 134(被信号 6:SIGABRT 中断)
我可以使用以下代码在最后重现此错误:
#include<CGAL/Simple_cartesian.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include<CGAL/Polygon_2.h>
#include<CGAL/Polygon_set_2.h>
#include<CGAL/Polygon_2_algorithms.h>
#include<CGAL/draw_polygon_2.h>
#include<CGAL/draw_polygon_set_2.h>
typedef double T;
typedef typename CGAL::Simple_cartesian<T> K;
typedef typename K::Point_2 Point_2;
typedef typename K::Segment_2 Segment_2;
typedef typename CGAL::Polygon_2<K> Polygon_2;
typedef typename CGAL::Polygon_set_2<K> Polygon_set_2;
int main(){
Polygon_set_2 S;
std::vector<Point_2> vertices2 = {
Point_2(-1.99618, -1.2929),
Point_2(-2.7071, -1.99618),
Point_2(-2.00382, -2.7071),
Point_2(-1.2929, -2.00382)
};
Polygon_2 polygon(vertices2.begin(), vertices2.end());
CGAL::draw(polygon);
S.insert(polygon);
CGAL::draw(S);
return 0;
}
第一个
CGAL::draw(polygon);
效果很好。
-fopenmp -O0 -Wall -fPIC -std=c++17 -Wno-unused-function -Wno-unused-local-typedefs
谢谢!
我还检查了多边形是否有效,结果证明它是有效的。我也尝试过不同的内核,但没有成功。我认为这应该是一个简单的修复,因为这对我来说看起来像是一个愚蠢的错误,但我不知道如何解决,因为我刚刚开始使用 CGAL。
只需将内核更改为 EPEC 即可。成功了!