我希望能够在三角剖分边界上提取每个边的顶点。问题是我首先通过在必要时定义域中的约束和漏洞来定义约束三角剖分。然后我需要通过网格细化算法来细化网格。除了一个小故障外,一切都很好用。我必须告诉哪个边缘在哪个边界上。让我举个例子:给定4个定义域的折线,并且是三角测量中的约束(比如顶部,底部,左和右折线),我必须告诉哪条折线在哪条折线上。我已经将每条折线定义为std :: vector,可以很容易地探测段上的点。像这样: CDT :: Point pt1; CDT :: Point 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?
}
答案 0 :(得分:2)
您可以使用受限三角测量中的is_contrained方法。
if (cdt.is_constrained(e)) ...
如果您可以使用左侧边缘,则必须首先在以下example中标记域,并检查边缘是否与两个具有不同nesting_level
的面相关。