簡體   English   中英

用 CGAL 剪裁線

[英]Clipping lines with CGAL

我想要實現的是獲得線和一組帶孔的多邊形之間的交點 - >通過掩碼(多邊形組)剪裁線 - >結果將是另一條線。 CGAL的問題:線段和多邊形之間的交集? 建議使用帶有兩個點的 Polygon 來表示線。 在 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;
}

這段代碼定義了一個交點的多邊形,而不是一條線:

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

只有兩個點,這是一個從一個點到第二個再回來的退化多邊形。

此圖顯示了兩個重疊邊緣彎曲並稍微分開的配置,因此更清楚發生了什么。 從該圖像中,您可以看到為什么結果是具有四個頂點(來自四個交點)的退化多邊形。

注意:當我運行此代碼時,我收到以下錯誤消息,說明發生了什么。

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 交集函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM