Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] segmentation fault, 2D Delaunay triangulation, 3.4 and 3.5-beta1

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] segmentation fault, 2D Delaunay triangulation, 3.4 and 3.5-beta1


Chronological Thread 
  • From: Manuel Caroli <>
  • To:
  • Subject: Re: [cgal-discuss] segmentation fault, 2D Delaunay triangulation, 3.4 and 3.5-beta1
  • Date: Wed, 05 Aug 2009 18:55:59 +0200

Hi Graham,

the move function does not seem to be documented, is it?
Anyway, you are using the Triangulation hierarchy. Currently the move function is not implemented in Triangulation_hierarchy_2 but does only work for Delaunay_triangulation_2.
So you either use Delaunay_triangulation_2 or you just call insert and remove depending on what makes more sense for your application.

best

Manuel


Graham Macpherson wrote:
Hi Manuel,

Could you send a minimal example that produces the error?

Attached and at the bottom of this email is an example. The objective is at each step to move or remove some points from the triangulation, and then add some more.

I get an seg fault within 2-3 steps (no DEBUG) or the "is_valid" assertion fails at the first step (DEBUG) with both exact and inexact kernels.

If I comment out "move", or replace it with the commented out "insert and remove", then the problem stops happening. If I just "move" the points (no removal or insertion) then it fails the assertion in DEBUG, but *doesn't* seg fault with no DEBUG.

Am I using the "move" function inappropriately or incorrectly?

Thanks very much for your help,

Graham

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <CGAL/Triangulation_hierarchy_2.h>
#include <CGAL/point_generators_2.h>
#include <CGAL/Random.h>
#include <CGAL/algorithm.h>

typedef CGAL::Exact_predicates_exact_constructions_kernel K;
// typedef CGAL::Exact_predicates_inexact_constructions_kernel K;

typedef CGAL::Triangulation_vertex_base_2<K> Vbb;
typedef CGAL::Triangulation_hierarchy_vertex_base_2<Vbb> Vb;
typedef CGAL::Triangulation_face_base_2<K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb,Fb> Tds;
typedef CGAL::Delaunay_triangulation_2<K,Tds> Dt;
typedef CGAL::Triangulation_hierarchy_2<Dt> Triangulation;
typedef Triangulation::Point Point;
typedef CGAL::Creator_uniform_2<double,Point> Creator;

int main( )
{
Triangulation t;

CGAL::Random r;

CGAL::Random_points_in_square_2<Point,Creator> g(1.0);

CGAL::copy_n( g, 10000, std::back_inserter(t));

for (int s = 0; s < 100; s++)
{
std::cout << "\nstep " << s << std::endl;

for
(
Triangulation::Finite_vertices_iterator vit =
t.finite_vertices_begin();
vit != t.finite_vertices_end();
++vit
)
{
if (r.get_double() > 0.9)
{
t.remove(vit);
}
else
{
t.move
(
vit,
vit->point()
+ K::Vector_2(r.get_double(0, 0.1), r.get_double(0, 0.1))
);

// t.insert
// (
// vit->point()
// + K::Vector_2(r.get_double(0, 0.1), r.get_double(0, 0.1))
// );

// t.remove(vit);
}
}

assert(t.is_valid());

std::cout << "Insert more vertices" << std::endl;

for (int i = 0; i < 1000; i++)
{
t.insert
(
Point(r.get_double(0, 1.0) - 0.5, r.get_double(0, 1.0) - 0.5)
);
}

std::cout << t.number_of_vertices() << std::endl;
}

return 0;
}






Archive powered by MHonArc 2.6.16.

Top of Page