出现 CGAL 错误:违反前提条件!将单个 Polygon_2 插入到 Polygon_Set_2

问题描述 投票:0回答:1

错误描述

将一个 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);
效果很好。

环境

  • 操作系统(Windows/Mac/Linux,32/64位):Ubuntu22 64位
  • 编译器:g++11.4
  • 发布或调试模式:调试模式
  • 使用的具体标志(如果有):
    -fopenmp -O0 -Wall -fPIC -std=c++17 -Wno-unused-function -Wno-unused-local-typedefs
  • CGAL版本:CGAL@a0a9d4
  • 增强版本:1.74
  • 其他库版本(如果使用)(Eigen、TBB 等):Eigen:3.4.0

谢谢!

我还检查了多边形是否有效,结果证明它是有效的。我也尝试过不同的内核,但没有成功。我认为这应该是一个简单的修复,因为这对我来说看起来像是一个愚蠢的错误,但我不知道如何解决,因为我刚刚开始使用 CGAL。

c++ polygon cgal
1个回答
0
投票

只需将内核更改为 EPEC 即可。成功了!

© www.soinside.com 2019 - 2024. All rights reserved.