Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] how to construct a 2d Triangulation explicitly

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] how to construct a 2d Triangulation explicitly


Chronological Thread 
  • From: 魏华祎 <>
  • To:
  • Subject: Re: [cgal-discuss] how to construct a 2d Triangulation explicitly
  • Date: Mon, 23 May 2011 00:30:55 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=jYEaHyXEz+MEAgRTI2DzNTZRtfPY94bBPBZ9p6gQx4RTWukp1T9uxc5HMl1RusXEZA 3OLVf30u2W7+sREUoNOcFdqN1wE4we4so49Dp9XrJvmvY3wNpMgeI+H60pbc4MPH2vP+ flKwECSQAW7SwK8zvA7BRDOyhHOVeY0wW5gZQ=

Thanks, Sebastien,

      After some tests, I found that when I create a new "Triangulation tri;", there already exist a face in tri, too. So I use  "tri.tds().faces().clear(); " to clear it before I create my own triangulation. Then the numbers of vertices and faces in tri are rihgt now.

    But I don't understand, for a empty triangulation, why it include a face in it?


Huayi

 

On Sun, May 22, 2011 at 11:43 PM, Sebastien Loriot (GeometryFactory) <sloriot.ml@gmail.com> wrote:
If you want to create your own triangulation, all operations
must be done at the TDS level. The TDS knows nothing about
finite or infinite simplices, they are simply simplices.

So the answer is yes, you need to create them.

S.

魏华祎 wrote:
Hi, Sebastien,

   Thanks for your reply. Yes, you are right, the infinite vertex is already present there. But, what about the infinite faces? Do I need create them explicitly? The output of tri.number_of_faces() is still three. It should be two.
   
Huayi

On Sun, May 22, 2011 at 11:29 PM, Sebastien Loriot (GeometryFactory) <sloriot.ml <http://sloriot.ml>@gmail.com <http://gmail.com>> wrote:

   The infinite vertex is already present in the triangulation even
   when empty, so you don't need to create it.

   S.



   魏华祎 wrote:


        Hi, everyone,
                 I have a 2d simple triangulation with four vertices:
       p1 = (0,0),  p2 = (1,0), p3  = (1,1), p4 = ( 0,1),  and two
       triangles: (p2, p3, p1) and (p4,p1,p3). And I want to construct
       a object of Triangulation_2 class, explicitly ( not write these
       information into files, then use >> read them). The following is
       my code. But at last, I got five finite vertices and three
       finite faces. I am confused,  can anyone give me some
       suggestions about it?  Thanks very much!

          By the way, I follow the code of  the "file_input" member
       function in Triangulation_data_structure_2.h to write my own code.



       #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
       #include <CGAL/IO/Color.h>
       #include <CGAL/Triangulation_2.h>

       #include <CGAL/Triangulation_face_base_2.h>
       #include <CGAL/Triangulation_vertex_base_2.h>

       typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
       typedef CGAL::Triangulation_vertex_base_2<K> Vb;
       typedef CGAL::Triangulation_face_base_2<K> Fb;
       typedef CGAL::Triangulation_data_structure_2<Vb,Fb> Tds;
       typedef CGAL::Triangulation_2<K,Tds> Triangulation;

       typedef Triangulation::Face_handle Face_handle;
       typedef Triangulation::Vertex_handle Vertex_handle;
       typedef Triangulation::Point Point;

       typedef Triangulation::Finite_vertices_iterator Fvi;

       int main(){


        int n = 4, m = 2, d = 2;
        std::vector<Point> P(4);
        P[0] = Point(0,0);
        P[1] = Point(1,0);
        P[2] = Point(1,1);
        P[3] = Point(0,1);

        std::vector<Vertex_handle> V(n+1);
        std::vector<Face_handle> F(m);

        Triangulation tri;
        tri.tds().set_dimension(d);
        // if I comment the following two lines, there will four finite
       vertices, but still three faces
        V[0] = tri.tds().create_vertex();          tri.set_infinite_vertex(V[0]); // set the infinite vertex of tri

        // create the vertex_handles
        for(int i = 1; i< 5;i++){
          V[i] = tri.tds().create_vertex();
          V[i]->set_point(P[i-1]);
        }

        //create the first face and set its vertices
        F[0] = tri.create_face();
        F[0]->set_vertex(0,V[2]);
        V[2]->set_face(F[0]);

        F[0]->set_vertex(1,V[3]);
        V[3]->set_face(F[0]);

        F[0]->set_vertex(2,V[1]);
        V[1]->set_face(F[0]);

        // create the second face and set its vertices
        F[1] = tri.create_face();
        F[1]->set_vertex(0,V[4]);
        V[4]->set_face(F[1]);

        F[1]->set_vertex(1,V[1]);
        V[1]->set_face(F[1]);
          F[1]->set_vertex(2,V[3]);
        V[3]->set_face(F[1]);

        // set neighbor information
        F[0]->set_neighbor(0,F[1]);
        F[1]->set_neighbor(0,F[0]);

        std::cout<<tri.number_of_vertices()<<std::endl<<tri.number_of_faces()<<std::endl;

        return 0;
       }



   --     You are currently subscribed to cgal-discuss.
   To unsubscribe or access the archives, go to
   https://lists-sop.inria.fr/wws/info/cgal-discuss




--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://lists-sop.inria.fr/wws/info/cgal-discuss





Archive powered by MHonArc 2.6.16.

Top of Page