CGAL 4.14贝塞尔曲线排列因两条直线弯曲而崩溃

时间:2019-05-18 14:42:15

标签: c++ cgal

在Arrangement_2 上的

CGAL :: insert有时会违反声明。我不能肯定地说 有问题的场景具有共同点,但是它们似乎常常涉及到一条曲线终止于另一条曲线的中间。我整理了一个最小的 例。对我来说(Windows 8.1,在QtCreator中运行的MSVC2015,CGAL 4.14), 这在调试模式下在第234行的断言中失败 No_intersection_surface_sweep_2_impl.h:

CGAL_assertion((m_statusLine.size() == 0)); 

在发布模式下,我的整个系统都挂起,直到可以杀死令人讨厌的进程为止。

任何人都可以复制吗?我是在做错什么,还是一个错误?以前在将Bezier曲线插入排列中存在一些错误-有关早期CGAL版本中自解决问题的信息,请参见this线程。

main.cpp:

#include <CGAL/Cartesian.h>
#include <CGAL/CORE_algebraic_number_traits.h>
#include <CGAL/Arr_Bezier_curve_traits_2.h>
#include <CGAL/Arrangement_2.h>

#include <sstream>

using NtTraits = CGAL::CORE_algebraic_number_traits;
using Rational = NtTraits::Rational;
using Algebraic = NtTraits::Algebraic;
using RationalKernel = CGAL::Cartesian< Rational >;
using AlgebraicKernel = CGAL::Cartesian< Algebraic >;
using ArrTraits = CGAL::Arr_Bezier_curve_traits_2< RationalKernel,
AlgebraicKernel, NtTraits >;
using BezierCurve2 = ArrTraits::Curve_2;
using Arrangement = CGAL::Arrangement_2< ArrTraits >;

int main()
{
    // Change 10.1 to 10 and problem goes away.
    const std::string curvesData =
                "2            \
                2 -10 0 10.1 0 \
                2 10 10 10 0 ";

    std::istringstream stream( curvesData );
    std::vector< BezierCurve2 > curvesToInsert;
    size_t numCurves = 0;
    stream >> numCurves;
    for( size_t i = 0; i < numCurves; i++ ) {
        BezierCurve2 curve;
        stream >> curve;
        curvesToInsert.push_back( curve );
    }

    Arrangement arr;
    // Assertion violation here.
    CGAL::insert( arr, curvesToInsert.begin(), curvesToInsert.end() );
    return 0;
}

0 个答案:

没有答案