【问题标题】:CGAL How can I tell if triangle is on the boundaryCGAL 如何判断三角形是否在边界上
【发布时间】:2013-12-20 00:25:08
【问题描述】:

我希望能够提取三角剖分边界上每条边的顶点。问题是,如果需要,我首先通过定义域中的约束和孔来定义约束三角剖分。然后我需要通过网格细化算法来细化网格。除了一个小故障外,这一切都很好而且花花公子。我必须告诉哪个边缘位于哪个边界上。让我举个例子:给定定义域的 4 条折线,并且是三角剖分中的约束(例如顶部、底部、左侧和右侧折线),我必须告诉边缘位于哪条折线上。我已将每条折线定义为 std::vector,可以轻松地探测线段上的点。像这样: CDT::点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?
}

【问题讨论】:

    标签: c++ graphics cgal


    【解决方案1】:

    您可以使用受约束三角剖分中的is_contrained 方法。

    if (cdt.is_constrained(e)) ...
    

    如果你可以有悬垂边缘,你必须首先像下面的example 一样标记域,并检查边缘是否与具有不同nesting_level 的两个面相关。

    【讨论】:

    • 如何在细化之前找到哪个网格细化边位于哪个约束边上? segment_2::has_on 是正确的方法吗?还是有别的办法?
    • 我认为,如果您将受约束的 Delaunay 三角剖分包装到 this class 中,您将可以访问信息(在约束上添加的点定义子约束)。
    • 确实如此。现在我不需要询问一条边是否受约束,因为我使用 Subconstraint_iterator 迭代了受约束的边。很抱歉反馈缓慢
    猜你喜欢
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2011-10-30
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多