4

私が達成しようとしているのは、線と穴のあるポリゴンのセットとの交点を取得することです->マスクで線をクリップします(ポリゴンのセット)->結果は別の線になります。CGALでの質問:セグメントとポリゴンの交差点?線を表すために2点のポリゴンを使用することをお勧めします。CGALサンプルの助けを借りて、私は次のスニペットを思いつきました。私の意図は、交差点を使用して長方形の内側にある線の一部を計算することでした。ただし、結果は4点であり、多角形と線で定義された半平面との交点を計算しているようです。

誰かがこれに光を当てることができますか?

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_2                                   Point_2;
typedef CGAL::Polygon_2<Kernel>                           Polygon_2;
typedef CGAL::Polygon_with_holes_2<Kernel>                Polygon_with_holes_2;
typedef std::list<Polygon_with_holes_2>                   Pwh_list_2;

int main()
{
  Polygon_2 P; // rectangle
  P.push_back (Point_2 (10, 10));  
  P.push_back (Point_2 (20, 10));
  P.push_back (Point_2 (20, 20));    
  P.push_back (Point_2 (10, 20));

  Polygon_2 Q; // line
  Q.push_back (Point_2 (0, 15));
  Q.push_back (Point_2 (25, 15)); 

  Pwh_list_2 symmR;
  Pwh_list_2::const_iterator it;

  CGAL::intersection (Q, P, std::back_inserter(symmR));


  for (it = symmR.begin(); it != symmR.end(); ++it) {
    std::cout << "--> ";
    print_polygon_with_holes( *it);
  }

  getchar();
  return 0;
}
4

1 に答える 1

0

このコードは、線ではなく交差のポリゴンを定義しています。

  Polygon_2 Q; // line
  Q.push_back (Point_2 (0, 15));
  Q.push_back (Point_2 (25, 15)); 

たった2つのポイントで、これは1つのポイントから2番目のポイントへの縮退したポリゴンです。

この画像は、2つの重なり合うエッジが湾曲し、少し離れている構成を示しているため、何が起こっているのかが明確になっています。その画像から、結果が(4つの交点からの)4つの頂点を持つ縮退したポリゴンである理由がわかります。

注:このコードを実行すると、何が起こっているのかを説明する次のエラーメッセージが表示されました。

CGAL warning: check violation!
Expression : false
File       : /usr/local/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h
Line       : 263
Explanation: The polygon boundary self overlaps.

ドキュメント(ここここ)を検索すると、Polygon_2-Line_2交差関数が見つかりませんでした。

于 2020-04-20T15:55:45.833 に答える