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: "Sebastien Loriot (GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] how to construct a 2d Triangulation explicitly
  • Date: Mon, 23 May 2011 10:23:50 +0200

魏华祎 wrote:
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?

It is an implementation details.

To make things clean, you should use these functions for the 3 first points:

Vertex_handle t.insert_first ( Point p)
Vertex_handle t.insert_second ( Point p)
Vertex_handle t.insert_in_face ( Point p, Face_handle f)

S.


Huayi


On Sun, May 22, 2011 at 11:43 PM, Sebastien Loriot (GeometryFactory) <sloriot.ml <http://sloriot.ml>@gmail.com <http://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>
<http://sloriot.ml>@gmail.com <http://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