Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Intersecting Arrangement_2's edges

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Intersecting Arrangement_2's edges


Chronological Thread 
  • From: Efi Fogel <>
  • To:
  • Subject: Re: [cgal-discuss] Intersecting Arrangement_2's edges
  • Date: Tue, 17 May 2016 23:50:06 +0300
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-phdr: 9a23:THQMxBDR1RLzBZOCiTLuUyQJP3N1i/DPJgcQr6AfoPdwSPn7pMbcNUDSrc9gkEXOFd2CrakU2qyM4+u5AjVIyK3CmU5BWaQEbwUCh8QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYsExnyfTB4Ov7yUtaLyZ/nhqboq9aKOFwArQH+SI0xBS3+lR/WuMgSjNkqAYcK4TyNnEF1ff9Lz3hjP1OZkkW0zM6x+Jl+73YY4Kp5pIYTGZj8ZLkyGLxEECw9YSdy/9zurRCFTA2V53JaFGsM1QFZBhDMqxD8UJC2uSTzsq9x2TKRINbtHo0yQimouqd3VAfz2mBALC886GiRi8pqjasdrgjmvA1624eTYYebM711carZON8bXmFcRd0CaipaH4npb5cTF/FTeqFDvozlrh0PqwG/DE+iHqT02zpQjzj326M9lO8uGAWD0A07FM8Vqyfpqs7oPvISTfyt1/uPii7Sautfnzb78onBNB475uqdWKp5NsvXx05oHAzMihCcqJfuIiiOhdkLqHWRuup8Sfq02SlgsBB0ujHpx8E2i4CPiJhS0UHB7Sw+wYA7IpqzR0d/JNKlC5BNrDrJC4wjScwrRyRkuT0x16YdkZ+9ZikDjpo9lDDFbPnSXoaJqjzkW+uVaWN1inNrf72ygz699EGhzqv3UczigwUClTZMjtSZ7iNF7BfU8MXSEvY=

Hi Everton,

1. The equivalent of the '==' operator is the 'Equal_2' functor; see http://doc.cgal.org/latest/Arrangement_on_surface_2/classArrTraits_1_1Equal__2.html
2. The overlay gives you the overlay. What do you mean by 'union of arrangements' or 'intersection of arrangements'?

Best,
Efi

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



On Tue, May 17, 2016 at 9:40 PM, Everton Constantino <> wrote:
Hi Efi,
reading CGAL's documentation I failed to find the definition of the ==
operator for edges so I ended up using brute force. The overlay free
function gives me the union of the arrangements (I dunno if there's an
option for the intersection).

Thanks,
E.

On 21:14, Efi Fogel wrote:
> I'm not sure why you compare points but say that you intend to intersect
> edges, but it seems to me that you should use the overlay() free function;
> see, e.g.,
> http://doc.cgal.org/latest/Arrangement_on_surface_2/group__PkgArrangement2Funcs.html#gaddb9e44b14b27e4cf0c7bb26b27d8518
>
> Also, notice that the traits contains a predicate that compares two points.
> You should use it instead of the '==' operator.
>
>
>    ____  _        ____             _
>   /_____/_) o    /__________  __  //
>  (____ (   (    (    (_/ (_/-(-'_(/
>                          _/
>
>
>
> On Tue, May 17, 2016 at 8:45 PM, Everton Constantino <
> > wrote:
>
> > So, changing the algorithm as you mentioned I realised something. One
> > edge on a Arrangement might represent the same line as several edges on
> > the other or, even worse, one edge of an Arrangement might contain
> > several edges of the other and even more so my way of checking the
> > intersection fails.
> >
> > What I think I should be doing is to check which segments of one
> > arrangement are contained in the other not edges in particular. I know a
> > naive, brute force, way to solve this. Do I have something in CGAL that
> > could help me?
> >
> > E.
> > On 18:14, Sebastien Loriot (GeometryFactory) wrote:
> > > One way to speed things up is to put arrangement edges in a std::set<
> > > std::pair<vertex_handle,vertex_handle> > with a custom less functor
> > > comparing the points of the vertices (if you don't care about
> > > orientation then also sort the pair before insertion).
> > > You can then use the set for queries.
> > >
> > > About the missing edges, it would be interesting to see those missing.
> > > Did you try another visibility algorithm provided in CGAL, just so see
> > > if the results are the same?
> > >
> > > Sebastien.
> > >
> > >
> > > On 05/17/2016 05:50 PM, Everton Constantino wrote:
> > > > The source is on github https://github.com/everton1984/Malex the file
> > is
> > > > src/get_chunks.cpp. Thanks for the == tip, I already started using it
> > > > btw.
> > > >
> > > > The data, unfortunately, is private and I can't share it.
> > > >
> > > > E.
> > > >
> > > > On 17:17, Sebastien Loriot (GeometryFactory) wrote:
> > > > > We're looking for a pb here. If we can't see a full example
> > > > > (in particular the typedefs) and try compiling it to reproduce the
> > > > > issue it is harder to help because we can only guess.
> > > > >
> > > > > I know it is some extra work but it is needed if you want to maximize
> > > > > the chances to get an answer.
> > > > >
> > > > > Sebastien.
> > > > >
> > > > > PS: Note that operator==()(Point_2, Point_2) is implemented in CGAL.
> > > > >
> > > > > On 05/17/2016 04:59 PM, Everton Constantino wrote:
> > > > > > Oh ok, here is the part where I do the intersection:
> > > > > >
> > > > > > Arrangement_2 res;
> > > > > > vector<Kernel::Segment_2> bounding_roads;
> > > > > > for( Edge_const_iterator eit = output_arr.edges_begin(); eit !=
> > output_arr.edges_end(); ++eit){
> > > > > >       bool found = false;
> > > > > >       for( Edge_const_iterator envit = env.edges_begin(); envit !=
> > env.edges_end() && !found; ++envit ){
> > > > > >           if( envit->source()->point().x() ==
> > eit->source()->point().x() &&
> > > > > >                   envit->source()->point().y() ==
> > eit->source()->point().y() &&
> > > > > >                   envit->target()->point().x() ==
> > eit->target()->point().x() &&
> > > > > >                   envit->target()->point().y() ==
> > eit->target()->point().y() ){
> > > > > >               found = true;
> > > > > >           }else if(envit->source()->point().x() ==
> > eit->target()->point().x() &&
> > > > > >                   envit->source()->point().y() ==
> > eit->target()->point().y() &&
> > > > > >                   envit->target()->point().x() ==
> > eit->source()->point().x() &&
> > > > > >                   envit->target()->point().y() ==
> > eit->source()->point().y() ){
> > > > > >               found = true;
> > > > > >           }
> > > > > >       }
> > > > > >       if( found ) {
> > > > > >           Kernel::Segment_2 seg( eit->source()->point(),
> > eit->target()->point() );
> > > > > >           bounding_roads.push_back(seg);
> > > > > >       }
> > > > > > }
> > > > > > CGAL::insert(res, bounding_roads.begin(), bounding_roads.end());
> > > > > >
> > > > > >
> > > > > > On 16:26, Sebastien Loriot (GeometryFactory) wrote:
> > > > > > > Sorry I meant a minimal code example to see where the pb could
> > be.
> > > > > > > The problem was clear.
> > > > > > >
> > > > > > > Sebastien.
> > > > > > >
> > > > > > > On 05/17/2016 04:22 PM, Everton Constantino wrote:
> > > > > > > > Hi Sebastien,
> > > > > > > > you can find a file at http://braindump.com.br/arr.pdf with
> > sets of 3
> > > > > > > > images, one is a map of roads, the 'raw' shows the computed
> > visibility
> > > > > > > > Arrangement (for the point on the image, there's also a not
> > shown square
> > > > > > > > drawn around the point) and the other shows the intersection
> > of edges
> > > > > > > > form by the roads and the visibility region.
> > > > > > > >
> > > > > > > > What I want to do is to calculate the roads that belong to the
> > > > > > > > visibility of a certain point. You will notice that some roads
> > that are
> > > > > > > > present both on the 'raw' image and on the full map are not
> > present on
> > > > > > > > the intersection.
> > > > > > > >
> > > > > > > > The way I'm calculating right now is iterating through edges
> > of both
> > > > > > > > arrangements and comparing source() and target() points (since
> > they are
> > > > > > > > directed segments I compare both directions because I don't
> > care).
> > > > > > > >
> > > > > > > > Hope that clarifies something.
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > > E.
> > > > > > > >
> > > > > > > > On 16:02, Sebastien Loriot (GeometryFactory) wrote:
> > > > > > > > > Please share a minimal example showing what is not working
> > correctly.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > >
> > > > > > > > > Sebastien.
> > > > > > > > >
> > > > > > > > > On 05/17/2016 03:52 PM, Everton Constantino wrote:
> > > > > > > > > > Hi,
> > > > > > > > > > I'm trying to intersect two Arrangement_2 edge's but
> > iterating through
> > > > > > > > > > both sets of edges and checking the source(), target() is
> > not only slow
> > > > > > > > > > but wrong (some edges are missing). Is there a canonical
> > way to do this?
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > You are currently subscribed to cgal-discuss.
> > > > > > > > > To unsubscribe or access the archives, go to
> > > > > > > > > https://sympa.inria.fr/sympa/info/cgal-discuss
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > You are currently subscribed to cgal-discuss.
> > > > > > > To unsubscribe or access the archives, go to
> > > > > > > https://sympa.inria.fr/sympa/info/cgal-discuss
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > You are currently subscribed to cgal-discuss.
> > > > > To unsubscribe or access the archives, go to
> > > > > https://sympa.inria.fr/sympa/info/cgal-discuss
> > > > >
> > > > >
> > > >
> > >
> > >
> > > --
> > > You are currently subscribed to cgal-discuss.
> > > To unsubscribe or access the archives, go to
> > > https://sympa.inria.fr/sympa/info/cgal-discuss
> > >
> > >
> >
> > --
> > Everton R. Constantino <>
> > "Success is overrated"
> >
>
> --
> You are currently subscribed to cgal-discuss.
> To unsubscribe or access the archives, go to
> https://sympa.inria.fr/sympa/info/cgal-discuss
>
>

--
Everton R. Constantino <>
"Success is overrated"




Archive powered by MHonArc 2.6.18.

Top of Page