【问题标题】:CGAL: Arrangement with Exact_circular_kernel_2CGAL:与 Exact_circular_kernel_2 的安排
【发布时间】:2012-12-14 21:02:54
【问题描述】:

我正在尝试使用Exact_circular_kernel_2 构建圆圈排列。当我在排列中插入一个圆圈时,我得到一个分段错误。
这是我的代码:

CGAL::Circle_2< CGAL::Exact_circular_kernel_2 > circle1( CGAL::Point_2< CGAL::Exact_circular_kernel_2 >(1,1), 2 );
CGAL::Exact_circular_kernel_2::Circle_2 circle2 = circle1;
CGAL::Circular_arc_2< CGAL::Exact_circular_kernel_2 > arc( circle2 );
CGAL::Arr_circular_line_arc_traits_2< CGAL::Exact_circular_kernel_2 >::Curve_2 curve = arc;
CGAL::Arrangement_2< CGAL::Arr_circular_line_arc_traits_2< CGAL::Exact_circular_kernel_2 > > myArrangement;
cout<<curve<<endl;
cout<<myArrangement.is_valid()<<endl;
insert ( myArrangement, curve );
cout<<"done"<<endl;

代码编译没有警告,我在第3行使用circle1circle2都没有关系,结果是一样的。

程序在分段错误发生之前打印以下内容:

1/1 1/1 2/1 1 0 1/1 -1/1 2/1 1 1/1 0 1/1 -1/1 2/1 1 1/1
1

所以myArrangementcurve 的值似乎是有效的。

任何想法我做错了什么?

我知道我可以使用另一个内核,但我想比较不同内核的性能,所以不使用这个内核并不是真正的解决方案。

【问题讨论】:

    标签: cgal


    【解决方案1】:

    我无法重现该问题。

    下面是一个稍微干净一点的版本,但你的版本也可以在我的平台上运行,Ubuntu 12.04、g++ 4.6.3、CGAL 4.1(或至少接近 4.1),你的版本是什么?

    #include <iostream>
    #include <CGAL/Exact_circular_kernel_2.h>
    #include <CGAL/Arr_circular_line_arc_traits_2.h>
    #include <CGAL/Arrangement_2.h>
    
    typedef CGAL::Exact_circular_kernel_2                           Kernel;
    typedef Kernel::Point_2                                         Point_2;
    typedef Kernel::Circle_2                                        Circle_2;
    typedef CGAL::Arr_circular_line_arc_traits_2<Kernel>            Traits;
    typedef Traits::Curve_2                                         Curve_2;
    typedef CGAL::Arrangement_2<Traits>                             Arrangement;
    int main()
    {
      Circle_2 circle(Point_2(1,1), 2);
      Curve_2 curve(circle);
      Arrangement arr;
      std::cout << curve << std::endl;
      std::cout << arr.is_valid() << std::endl;
      CGAL::insert(arr, curve);
      std::cout << "done" << std::endl;
      return 0;
    }
    

    【讨论】:

    • 我使用的是 Ubuntu 10.04.4 LTS、g++ 4.6.2,和你一样“CGAL 4.1(或至少接近 4.1)”。我也不确定如何确定版本。我无法编译你的版本,它在第 15 行说有no matching function for call to ‘boost::variant...。我也尝试过 g++ 4.7.2,但没有任何改变。所以我安装了一个带有 g++ 4.6.3 和 CGAL 4.1 的 Ubuntu 12.10,在这个平台上,两个源代码版本都可以编译和工作,没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多