CGAL:与Exact_circular_kernel_2的安排

时间:2012-12-14 21:02:55

标签: cgal

我正在尝试使用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行使用circle1还是circle2,结果都是一样的。

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

  

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的值似乎有效。

任何想法我做错了什么?

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

1 个答案:

答案 0 :(得分:3)

我无法重现这个问题。

下面是一个稍微干净的版本,但你的版本也适用于我的平台,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;
}