2

私は一連のセグメント (それぞれが 2 つの点で定義されている; 2D) を持っており、セグメント x ごとに、x と交差している他のセグメント y1、...、yn の数を知りたいと考えています。CGAL でそれを効率的に行うにはどうすればよいでしょうか。

CGAL ライブラリとコンピュータ ジオメトリの経験はまったくありません。上記のことを行うためのアルゴリズムが必要です。したがって、カスタマイズされた関数を実装する代わりに、このライブラリを使用する方が効率的であると考えました。

CGALの例のsweep_line.cppは、一連のセグメントのすべての交点を取得する方法を示しています。ポイントには興味がないので、ポイントとセグメントをチェックして、各セグメントの交点の数を取得する必要があります。しかし、CGALでそれを行う方法がわかりません。また、より効率的な方法があると思います。つまり、ポイントの計算を回避し、見つかったポイントと交差しているかどうかを新しいチェックですべてのセグメントにわたって反復します。

任意のヒント?ご意見ありがとうございます。

サーシャ

PS: もう 1 つの初心者向けの簡単な質問: 以下の結果がマイナス記号で出力されるのはなぜですか?

Segment_2 segments[] = {Segment_2  (Point_2 (1, 5), Point_2 (8, 5)),
                              Segment_2 (Point_2 (1, 1), Point_2 (8, 8)),
                              Segment_2 (Point_2 (3, 1), Point_2 (3, 8)),
                              Segment_2 (Point_2 (8, 5), Point_2 (8, 8))};

      std::vector<Point_2>     pts;

      CGAL::compute_intersection_points (segments, segments + 4,
                                         std::back_inserter (pts));

3 つの交点が見つかりました: -21/-7 -21/-7 -3/-1 -5/-1 -35/-7 -35/-7

PS2: タイトルと最初の行が同じ問題を説明していないことに気付きました。テキストで説明されているように、どのセグメントが x と交差するかを知る必要はありませんが、セグメントの数だけを知る必要があります。

4

1 に答える 1

1

do_intersect関数は 2 つのセグメントに適用できます。

詳細については、 http ://www.cgal.org/Manual/latest/doc_html/cgal_manual/Kernel_23_ref/Function_do_intersect.html を参照してください。

于 2011-07-27T07:25:32.757 に答える