簡體   English   中英

如何使用 CGAL 獲得 3D Delaunay 鑲嵌的邊緣?

[英]How to get the edges of a 3D Delaunay tessellation with CGAL?

這個問題從標題就很清楚了。 我嘗試了很多變種

  const DT3::Finite_edges itedges = mesh.finite_edges();
  for(DT3::Finite_edges_iterator eit = itedges.begin(); eit != itedges.end(); eit++) {
      const CGAL::Triple<DT3::Cell_handle, int, int> edge = *eit;
      edge.first->vertex((edge.second+1) % 3)->info();
      edge.first->vertex((edge.third+1) % 3)->info();
  }

但沒有一個有效(我嘗試了% 2% 4+2等)。

我能夠得到四面體和三角形。 當然,我可以從中提取邊緣,但這需要刪除一些重復項。

無需使用加法或模運算。 解決方案更簡單:

  const DT3::Finite_edges itedges = mesh.finite_edges();
  for(DT3::Finite_edges_iterator eit = itedges.begin(); eit != itedges.end(); eit++) {
      const DT3::Edge edge = *eit;
      const DT3::Vertex::Info v1_info = edge.first->vertex(edge.second)->info();
      const DT3::Vertex::Info v2_info = edge.first->vertex(edge.third)->info();
  }

嵌套類型Edge的文檔在此處以及3D 三角測量數據結構用戶手冊的“表示”部分中


編輯:請注意,我選擇尊重您的編碼風格,忽略現代 C++ 功能。 使用 C++11 功能,我更喜歡這樣寫,使用auto基於范圍的 for 循環

  for(const auto edge: mesh.finite_edges()) {
      const auto v1_info = edge.first->vertex(edge.second)->info();
      const auto v2_info = edge.first->vertex(edge.third)->info();
  }

暫無
暫無

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

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