【问题标题】:How to get vertices of a triangle in constraint delaunay triangulation?如何在约束delaunay三角剖分中获得三角形的顶点?
【发布时间】:2013-09-02 17:58:11
【问题描述】:

我用cgal写了一个程序如下:

typedef CGAL::Exact_predicates_inexact_constructions_kernel       K;
typedef CGAL::Triangulation_vertex_base_2<K>                      Vb;
typedef CGAL::Triangulation_face_base_with_info_2<FaceInfo2,K>    Fbb;
typedef CGAL::Constrained_triangulation_face_base_2<K,Fbb>        Fb;
typedef CGAL::Triangulation_data_structure_2<Vb,Fb>               TDS;
typedef CGAL::Exact_predicates_tag                                Itag;
typedef CGAL::Constrained_Delaunay_triangulation_2<K, TDS, Itag>  CDT;
typedef CDT::Point                                                Point;
typedef CGAL::Polygon_2<K>                                        Polygon_2;

int main( )
{

  //construct two non-intersecting nested polygons  
  Polygon_2 polygon1;
  polygon1.push_back(Point(0,0));
  polygon1.push_back(Point(2,0));
  polygon1.push_back(Point(2,2));
  polygon1.push_back(Point(0,2));
  CDT cdt;
  insert_polygon(cdt,polygon1);
  CDT::Finite_faces_iterator t=cdt.faces_begin();

for (t = cdt.finite_faces_begin(); t != cdt.finite_faces_end(); t++)
    {
      //how can i achieve that?

    }

}

我想在 for 循环的每次迭代中获取从 cdt.finite_faces_begin()t 指向的三角形的顶点。

例如在循环的第一次迭代中,我得到第一个三角形的顶点,在循环的第二次迭代中,我得到第一个+第二个三角形的顶点,在第三个中,我得到第一个顶点+第二个+第三个三角形等等。 我怎样才能做到这一点?

【问题讨论】:

  • 你应该明确你想要获得什么。当你遍历面时,在循环体中你可以对第 i 个面做一些事情。如果你想为 first+second+..+i 做点什么,你应该把它收集在一个容器中。

标签: c++ triangulation cgal delaunay


【解决方案1】:

如果在第 i 次迭代中只需要面的三个顶点,请使用 for(inti=0;i&lt;3;++i){t-&gt;vertex(i);}t-&gt;vertex(i)-&gt;point()

如果您不想获得已经从前一个面获得的顶点,则必须使用在循环外声明的std::set&lt;Vertex_handle&gt;

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2016-02-08
    • 2014-01-21
    • 2018-04-13
    • 2015-01-07
    • 2012-03-04
    相关资源
    最近更新 更多