![](/img/trans.png)
[英]CGAL 2D Delaunay Triangulation: How to get edges as vertex id pairs
[英]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.