Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Problem with Polygon_2 intersection

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Problem with Polygon_2 intersection


Chronological Thread 
  • From: Efi Fogel <>
  • To:
  • Subject: Re: [cgal-discuss] Problem with Polygon_2 intersection
  • Date: Tue, 13 Mar 2007 14:11:07 +0200

Looking at the attached code, the 1st line already reveals that you are using an inexact number type. Instead of defining your own, you can use one of the predefined kernel. Since you need to construct new geometric objects (i.e., intersections), try:

CGAL::Exact_predicates_exact_constructions_kernel


wrote:

Hi,

I am currently having a problem computing an intersection of 2 polygons. My
program stops, and enven with visual debuger, I do not know what happen. My
current problem stands in a method from a class. Here is the prototype :

void Paving::ComputeCrops( const std::vector< CGAL::Polygon_2<CCd> >
&polygones )

I previously defined :

typedef CGAL::Cartesian<double> CCd;

Here is the (main) code in my method :

std::vector< CGAL::Polygon_2<CCd> >::const_iterator itb_pol =
polygones.begin(), ite_pol = polygones.end();
for (;itb_pol!=ite_pol;itb_pol++,cpt++)
{
CGAL::Polygon_2<CCd> poly_proj;
CGAL::Polygon_2<CCd>::Vertex_circulator circb =
(*itb_pol).vertices_circulator(), done = circb;
do
{
TPoint3D <double> p3d = mnt.GetPoint( (*circb).x() ,
(*circb).y() );
TPoint2D <double> p2d;
if ( strcmp(m_DEM_type,"ground") == 0 )
{
ori.GroundToPhoto(p3d,p2d);
}
else // type = "map"
{
ori.MapToPhoto(p3d,p2d);
}
CCd::Point_2 pi(p2d.x,p2d.y);
poly_proj.push_back( pi );
} while( (++circb)!=done ) ;

// on cree le polygone de l'image
CGAL::Polygon_2<CCd> poly_image;
{
CCd::Point_2 pi0(0.,0.);
CCd::Point_2 pi1(ori.GetNs().-1,0.);
CCd::Point_2 pi2(ori.GetNs().-1,ori.GetNl()-1.);
CCd::Point_2 pi3(0.,ori.GetNl()-1.);
poly_image.push_back( pi0 );
poly_image.push_back( pi1 );
poly_image.push_back( pi2 );
poly_image.push_back( pi3 );
}

// On fait l'intersection du polygone image et du polygone
projete
std::list< Polygon_2_WH_CCd > intR;
std::list< Polygon_2_WH_CCd >::iterator it;

CGAL::intersection(poly_proj,poly_image,std::back_inserter(intR));

/* ... */


I also have defined :

typedef CGAL::Polygon_2<CCd> Polygon_2_CCd;
typedef CGAL::Polygon_with_holes_2<CCd> Polygon_2_WH_CCd;


My programs suddenly stops (sometimes) in the CGAL::intersection(...)
function. I really do not understand what happen. The both polygons contain
always 4 points. The debuger did not helped me, that why I write to the list.

Is there any explanation for this behavior ?
Is there any way to test if there is a problem, like a try ... catch
statement ?

Thanks in advance for your answers.

Olivier Tournaire

PS : I have also tried the same code, remplacing CGAL::intersection(...) with
CGAL::do_intersect(...). Same result ...



--
____ _ ____ _
/_____/_) o /__________ __ //
(____ ( ( ( (_/ (_/-(-'_(/
_/







Archive powered by MHonArc 2.6.16.

Top of Page