我希望能够提取三角剖分边界上每条边的顶点。问题是我首先通过在必要时在域中定义约束和孔来定义约束三角剖分。然后我需要通过网格细化算法细化网格。除了一个小故障外,这一切都很好用。我必须说出哪条边位于哪条边界上。让我举个例子:给定定义域的 4 条多段线,并且是三角剖分中的约束(例如顶部、底部、左侧和右侧多段线),我必须告诉哪条边位于哪条多段线上。我已将每条折线定义为 std::vector,可以很容易地探测线段上的点。像这样: CDT::点 pt1; CDT::点pt2;
for(const auto& seg : segments)
{
if(seg.has_on(pt1))
{ num++; }
if(seg.has_on(pt2))
{ num++; }
if(num==2){/*success? -> return true*/}
}
我知道 CGAL::bounded_side_2 函数,遗憾的是它在多边形上运行。我怎么解决这个问题?
for(CDT::Finite_edges_iterator it = cdt.finite_edges_begin();
it != cdt.finite_edges_end(); ++it)
{
CDT::Edge e=*it;
// how can I tell if an edge is on boundary?
}
最佳答案
您可以使用 is_contrained来自约束三角剖分的方法。
if (cdt.is_constrained(e)) ...
如果你可以有空边,你必须首先像下面这样标记域example并检查边缘是否与具有不同 nesting_level
的两个面相关。
关于c++ - CGAL 如何判断三角形是否在边界上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20694284/