Как получить вершины треугольника в триангуляции Делоне с ограничениями?

Я написал программу с использованием 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?

    }

}

Я хочу получить вершины треугольников от cdt.finite_faces_begin() до треугольника, которые t указывают на него в каждой итерации цикла for.

например, в первой итерации цикла я получаю вершины первого треугольника, а во второй итерации цикла я получаю вершины первого + второго треугольников, а в третьей я получаю вершины первый + второй + третий треугольники и так далее. как я могу этого добиться?


person Mehdi bayat    schedule 01.09.2013    source источник
comment
вы должны уточнить, что вы хотите получить. Когда вы зацикливаетесь на лицах, в теле цикла вы можете что-то сделать с i-м лицом. Если вы хотите сделать что-то для первого+второго+..+i, вам, возможно, следует собрать это в контейнере.   -  person Andreas Fabri    schedule 02.09.2013


Ответы (1)


Если в i-й итерации вы хотите использовать только три вершины грани, используйте for(inti=0;i<3;++i){t->vertex(i);} или t->vertex(i)->point().

Если вы не хотите получать вершину, которую вы уже получили от предыдущей грани, вы должны использовать std::set<Vertex_handle>, который вы объявляете вне цикла.

person Andreas Fabri    schedule 02.09.2013