CGAL 4.7:安排插入(arr、开始、结束)崩溃

CGAL 4.7: Arrangement insert(arr,begin,end) crashes

我正在尝试聚合插入 x 单调折线,但出现以下错误:

terminate called after throwing an instance of 'CGAL::Precondition_exception'
  what():  CGAL ERROR: precondition violation!
Expr: i != INVALID_INDEX
File: /home/vladimir/lib-cgal/include/CGAL/Arr_polycurve_basic_traits_2.h
Line: 727

并且不知道为什么会这样。我想念什么吗?我的输入错误吗?或者这是一个错误?这是导致此行为的代码片段:

#include <vector>

#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Arr_segment_traits_2.h>
#include <CGAL/Arr_polyline_traits_2.h>
#include <CGAL/Arrangement_2.h>

typedef CGAL::Exact_predicates_exact_constructions_kernel   Kernel;
typedef Kernel::Point_2                                     Point_2;
typedef CGAL::Arr_segment_traits_2<Kernel>                  Segment_traits_2;
typedef CGAL::Arr_polyline_traits_2<Segment_traits_2>       Geom_traits_2;
typedef CGAL::Arrangement_2<Geom_traits_2>                  Arrangement_2;

int main()
{
    Arrangement_2 arr;
    std::vector<Geom_traits_2::X_monotone_curve_2> segments;

    {
        auto ctor = arr.geometry_traits()->construct_x_monotone_curve_2_object();

        typedef std::vector<Point_2> Line;
        std::vector<Line> lines = {
            {{0,0}, {8,0}},
            {{2,0}, {7,0}},
            {{4,2}, {6,3}},
            {{1,1}, {3,0}, {5,0}},
        };

        for (auto &line: lines) {
            segments.push_back(ctor(line.begin(), line.end()));
        }
    }

    insert(arr, segments.begin(), segments.end());

    return 0;
}

我使用的 CGAL 版本是 4.7,但我用 4.5.2 和最新的 git 版本 (81d638341) 尝试过,结果相同。

线条是相交的,但据我所知应该没问题。我观察到将 {{1,1}, {3,0}, {5,0}} 更改为 {{2,1}, {3,0}, {5,0}} 不会导致错误。将 {{1,1}, {3,0}, {5,0}} 分成两段 {{1,1}, {3,0}}, {{3,0}, {5,0}} 也不会出现错误。

我也注意到另一个线程 (link) 有类似的问题已修复,但我在 4.7 版中没有看到此修复。可能它在代码的其他地方被修复了,或者这个修复不知何故丢失了。?反正好像和我的问题无关,但谁知道呢

我能够重现该问题,乍一看它像是一个错误。我们正在调查它,但目前您有 2 个选项可以解决此问题: 1.使用增量插入。增量插入基于完全不同的算法。 2. 将每条多段线分成线段并构建线段排列而不是多段线排列。我已经用产生您提供的问题的最小示例对其进行了测试(顺便说一句,您)并且它工作正常。

BW,你说的link与此无关