1

を使用して円の配置を構築しようとしていExact_circular_kernel_2ます。Circle をアレンジメントに挿入すると、セグメンテーション エラーが発生します。
これは私のコードです:

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;

circle1コードは警告なしでコンパイルされ、3 行目で使用するかどうかは関係ありません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あるように見えます。

私が間違っていることはありますか?

別のカーネルを使用できることは承知していますが、異なるカーネルのパフォーマンスを比較したいので、このカーネルを使用しないことは実際の解決策にはなりません。

4

1 に答える 1

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;
}
于 2012-12-19T09:58:36.323 に答える