Boost logo

Geometry :

Subject: Re: [geometry] Intersection bug
From: Barend Gehrels (barend_at_[hidden])
Date: 2014-03-22 18:36:36


Hi,

741 5963 wrote On 21-3-2014 14:58:
> Hi,
>
> There seems to be a bug in boost::geometry::intersection that we
> regularly encounter. The result of an intersection is sometimes equal
> to one of the input polygons, when the result should be empty. For
> example:
>
> typedef boost::geometry::model::d2::point_xy<double> Point;
> typedef boost::geometry::model::polygon<Point> Polygon;
> Polygon pg1;
> Polygon pg2;
> boost::geometry::model::multi_polygon<Polygon> result;
>
> boost::geometry::append(pg1, Point(-6.0, 3.2500000000000013));
> boost::geometry::append(pg1, Point(-9.0, 3.2500000000000022));
> boost::geometry::append(pg1, Point(-9.0, 6.5));
> boost::geometry::append(pg1, Point(-6.0, 6.5));
> boost::geometry::append(pg1, Point(-6.0, 3.2500000000000013));
>
> boost::geometry::append(pg2, Point(-3.0, 0.0));
> boost::geometry::append(pg2, Point(-6.0, 0.0));
> boost::geometry::append(pg2, Point(-6.0, 3.2500000000000013));
> boost::geometry::append(pg2, Point(-3.0, 3.2500000000000009));
> boost::geometry::append(pg2, Point(-3.0, 0.0));
>
> boost::geometry::intersection(pg1, pg2, result);
>
> After the intersection, result contains a polygon equal to pg1. We're
> using boost 1.55 and also tried the rescale_to_integer branch, which
> gives the same results.
>
> The problem seems to be with boost::geometry::within. We've previously
> had problems with within that we resolved by using a different
> strategy. Changing the strategy of the within calls in the function
> update_selection_map in select_rings.hpp makes intersection return the
> correct result for this case.
>

Thanks for your report, and for your suggestion for the fix. I can
reproduce it indeed, also in the new approach (because it is not caused
by that).

Can you create a ticket? (Otherwise I will create one).
https://svn.boost.org/trac/boost/

Regards, Barend


Geometry list run by mateusz at loskot.net