Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Is CGAL::intersection buggy?

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Is CGAL::intersection buggy?


Chronological Thread 
  • From: Bob Bill <>
  • To: "Sebastien Loriot\" ( via cgal-discuss Mailing List)" <>
  • Subject: Re: [cgal-discuss] Is CGAL::intersection buggy?
  • Date: Fri, 4 Feb 2022 17:32:44 +0000 (UTC)
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23: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
  • Ironport-hdrordr: A9a23:q7Li/aCqTC+nnv3lHell55DYdb4zR+YMi2QD/UZ3VBBTb4i8m8 ehgfVz726NtN9xYgBHpTnkAsK9qBznm6KdjbNxAV7mZniFhILKFvAE0WKB+UyCJ8SWzIc0up uIMZIObeEYZmIK6foSjjPZLz9Z+qj/zImYwd356FdGCSxJS4Ul1SdWLW+geHFedU19A504Ht 65yaN8ywZJLRwsA/iGOg==
  • Ironport-phdr: A9a23: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 xUMCQ==
  • Ironport-sdr: gpNY92i+pkOr0fW3nbWpchxegrTAOnOAxSKksP9t2rF2ms7KiMxDDiFkPuiW3tnnSO4YiGnAZ3 L2zFtDUyQTYkWYx5R7BG+xnznnuWVJmQYE0f01scJHB9KOMFwv9Fqz08EOlQCLgf4OYTpnRy1A oTFNYrywF6oCaSs69KhQ8ZS+mioYOTvLjMkJDrvLeiePtSTjuXIviDnSPUwwvPJtTZmiRf05iK VievyaTAQMKuriTjNJ1Fu5APeZwvfzC4h0I3pKUYU+SdkqTraT+CvUG1Y2ASzZdS8kp96y/kaI wHIgtUJhWTiQCOwitn59CEao

Right, now it works! 
One more question: if I need to access the coordinates of the vertices of the resulting polygon, what is the best way to achieve this?

I did this way, but I'd love to hear your take on this:

//here poly_vec is the vector where the intersection is written to. I'm using that instead of a list so I can use []. In this case there the resulting polygon_with_holes is the 0-th entry of that vector

for (auto it = poly_vec[0].holes_begin(); it != poly_vec[0].holes_end(); ++it) { //iterate over holes
for (auto it_in_hole = it->vertices_begin(); it_in_hole != it->vertices_end(); ++it) { //iterate over poly

std::cout << "x-coordinate: " << it_in_hole->x() << '\n'
<< "y-coordinate: " << it_in_hole->y() << '\n';
}
}

Best,
Bob

Il venerdì 4 febbraio 2022, 14:56:25 CET, Sebastien Loriot" ( via cgal-discuss Mailing List) <> ha scritto:


I was about to answer the same thing as Christoper.

Best,

Sebastien

On 2/4/22 2:50 PM, Christopher Mitchell ( via cgal-discuss
Mailing List) wrote:
> I believe the problem may be that your second polygon is oriented CW
> instead of CCW.
>
> Sincerely,
> Christopher
>
> On Fri, Feb 4, 2022 at 8:44 AM Bob Bill <
> <mailto:>> wrote:
>
>    Dear Sebastien,
>
>    thanks for the quick reply. I changed the code as you asked. However
>    the result is still the same. Does it work properly on your machine?
>
>    Best,
>    Bob
>
>    Il venerdì 4 febbraio 2022, 14:29:17 CET, Sebastien Loriot"
>    ( <mailto:> via cgal-discuss
>    Mailing List) < <mailto:>>
>    ha scritto:
>
>
>    Replace
>
>    typedef CGAL::Simple_cartesian<double> K;
>
>    by
>
>    #include <CGAL/Exact_predicates_exact_constructions_kernel.h>
>    typedef CGAL::Exact_predicates_exact_constructions_kernel K;
>
>    More details about why here:
>    https://www.cgal.org/FAQ.html#inexact_NT
>    <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.cgal.org_FAQ.html-23inexact-5FNT&d=DwMFaQ&c=slrrB7dE8n7gBJbeO0g-IQ&r=zsvFlmXfwI9H5xCMhxiHhQ&m=5WA2bcou1ZMQ4DLX2ggiRrrEe5CZNLQ0S7ktABh-owQLas3_p7oGcO_ORRdHWLwr&s=336f97XuAKXVN7JrE3mK_vYHoq6AXsJv3Kg_6UsR6xs&e=>
>
>    Best,
>
>    Sebastien.
>
>
>    On 2/4/22 2:26 PM, Bob Bill (
>    <mailto:> via cgal-discuss Mailing
>    List) wrote:
>      > I'm trying to find the area of the intersection between a square and
>      > another polygon. My code so far is the following (adapted from here
>      >
>    <https://stackoverflow.com/questions/10502672/compute-intersection-area-of-two-polygons-with-cgal
>    <https://urldefense.proofpoint.com/v2/url?u=https-3A__stackoverflow.com_questions_10502672_compute-2Dintersection-2Darea-2Dof-2Dtwo-2Dpolygons-2Dwith-2Dcgal&d=DwMFaQ&c=slrrB7dE8n7gBJbeO0g-IQ&r=zsvFlmXfwI9H5xCMhxiHhQ&m=5WA2bcou1ZMQ4DLX2ggiRrrEe5CZNLQ0S7ktABh-owQLas3_p7oGcO_ORRdHWLwr&s=8-NlTFRUl4zF5FUpGJnJDmI9Ei9qujJ8SYEsZtGaF6g&e=>>,
>
>
>      > I just changed the points):
>      >
>      > #include<CGAL/Boolean_set_operations_2.h>
>      > #include<CGAL/Polygon_2.h>
>      > #include<CGAL/Polygon_2_algorithms.h>
>      > #include<CGAL/Polygon_with_holes_2.h>
>      > #include<CGAL/Simple_cartesian.h>
>      > #include<iostream>
>      >
>      > typedef CGAL::Simple_cartesian<double> K;
>      > typedef K::Point_2 Point;
>      > typedef CGAL::Polygon_2<K> Polygon_2;
>      > typedef CGAL::Polygon_with_holes_2<K> Polygon_with_holes_2;
>      >
>      > int main() {
>      > const std::vector<Point> pts{{-1, -1}, {1, -1}, {1, 1}, {-1, 1}};
>      > const std::vector<Point> pts2{{0, 1}, {0, 2}, {2, 1}, {1, 0}};
>      >
>      > Polygon_2 poly1(pts.begin(), pts.end());
>      > Polygon_2 poly2(pts2.begin(), pts2.end());
>      > std::list<Polygon_with_holes_2> polyI;
>      >
>      > CGAL::intersection(poly1, poly2, std::back_inserter(polyI));
>      >
>      > double totalArea = 0;
>      > typedef std::list<Polygon_with_holes_2>::iterator LIT;
>      > for (LIT lit = polyI.begin(); lit != polyI.end(); lit++) {
>      > std::cout << *lit << '\n';
>      > totalArea += lit->outer_boundary().area();
>      > }
>      > std::cout << "TotalArea::" << totalArea;
>      > }
>      >
>      > It compiles just fine, but then when I run it, I got the
>    following output:
>      > *3 0 1 1 1 0 1  0 *
>      > *TotalArea::0*
>      >
>      > meaning that two points are collinear and hence the area is 0.
>    What is
>      > my mistake here? I'm honestly a bit puzzled by the result and I
>    don't
>      > know how I am supposed to fix this.
>      >
>      >
>      > Best,
>      > Bob
>      >
>      >
>      >
>      >
>      >
>      >
>      >    Compute intersection area of two polygons with cgal
>      >
>      > Given the vertices of two convex polygons, what is the simplest
>    way of
>      > computing the area of their intersection ...
>
>      >
>      >
>    <https://stackoverflow.com/questions/10502672/compute-intersection-area-of-two-polygons-with-cgal
>    <https://urldefense.proofpoint.com/v2/url?u=https-3A__stackoverflow.com_questions_10502672_compute-2Dintersection-2Darea-2Dof-2Dtwo-2Dpolygons-2Dwith-2Dcgal&d=DwMFaQ&c=slrrB7dE8n7gBJbeO0g-IQ&r=zsvFlmXfwI9H5xCMhxiHhQ&m=5WA2bcou1ZMQ4DLX2ggiRrrEe5CZNLQ0S7ktABh-owQLas3_p7oGcO_ORRdHWLwr&s=8-NlTFRUl4zF5FUpGJnJDmI9Ei9qujJ8SYEsZtGaF6g&e=>>
>      >
>      >
>      >
>      > --
>      > You are currently subscribed to cgal-discuss.
>      > To unsubscribe or access the archives, go to
>      > https://sympa.inria.fr/sympa/info/cgal-discuss
>    <https://urldefense.proofpoint.com/v2/url?u=https-3A__sympa.inria.fr_sympa_info_cgal-2Ddiscuss&d=DwMFaQ&c=slrrB7dE8n7gBJbeO0g-IQ&r=zsvFlmXfwI9H5xCMhxiHhQ&m=5WA2bcou1ZMQ4DLX2ggiRrrEe5CZNLQ0S7ktABh-owQLas3_p7oGcO_ORRdHWLwr&s=K0yaj-QwjeaC3YzZcYX3TeHvMy_CSnKjNmL-qTZ42mY&e=>
>      >
>
>    --
>    You are currently subscribed to cgal-discuss.
>    To unsubscribe or access the archives, go to
>    https://sympa.inria.fr/sympa/info/cgal-discuss
>    <https://urldefense.proofpoint.com/v2/url?u=https-3A__sympa.inria.fr_sympa_info_cgal-2Ddiscuss&d=DwMFaQ&c=slrrB7dE8n7gBJbeO0g-IQ&r=zsvFlmXfwI9H5xCMhxiHhQ&m=5WA2bcou1ZMQ4DLX2ggiRrrEe5CZNLQ0S7ktABh-owQLas3_p7oGcO_ORRdHWLwr&s=K0yaj-QwjeaC3YzZcYX3TeHvMy_CSnKjNmL-qTZ42mY&e=>

>
>
>
>
>    --
>    You are currently subscribed to cgal-discuss.
>    To unsubscribe or access the archives, go to
>    https://sympa.inria.fr/sympa/info/cgal-discuss
>    <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





Archive powered by MHonArc 2.6.19+.

Top of Page