[Boost-bugs] [Boost C++ Libraries] #13571: difference results in invalid output

Subject: [Boost-bugs] [Boost C++ Libraries] #13571: difference results in invalid output
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2018-05-22 14:25:03


#13571: difference results in invalid output
------------------------------+----------------------------
 Reporter: anonymous | Owner: Barend Gehrels
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: geometry
  Version: Boost 1.66.0 | Severity: Problem
 Keywords: |
------------------------------+----------------------------
 The difference of the following polygons results in invalid output:

 using point_type = boost::geometry::model::d2::point_xy<double>;
 typedef boost::geometry::model::ring<point_type, false, true> polygon; //
 ring<Point, ClockWise, Closed, ..>

 polygon op1, op2;

 boost::geometry::read_wkt("POLYGON((-5.357134899522904 1.708858148436605,
 -5.357046447070072 1.70877395054338, -5.210065937318399
 -4.255706093497865, -8.65742840572935 -7.877265427733816,
 -9.246259311414669 -8.490599384498884, -8.647097810281494
 -9.763145957490103, -5.287187110528729 -8.539478296007726,
 4.07689365108185 -12.90390576571258, 6.997906000870004 3.116694062477888,
 -3.776939893600782 18.69699618899459, -3.858843408040787
 18.57007309862488, -2.981468369027455 17.54675359552481,
 -4.116369566376584 2.772428265346094, -5.357134899522904
 1.708858148436605))", op1);
 boost::geometry::read_wkt("POLYGON((-8.382184938267567 -5.157754480221099,
 -11.2072487852155 -5.954897113329205, -12.6412056272337
 -8.516183878234685, -11.8440629941256 -11.34124772518262,
 -9.282776229220117 -12.77520456720082, -6.457712382272181
 -11.97806193409271, -5.023755540253982 -9.416775169187234,
 -5.820898173362086 -6.591711322239298, -8.382184938267567
 -5.157754480221099))", op2);

 boost::geometry::validity_failure_type type0 =
 boost::geometry::no_failure;
 bool v0 = boost::geometry::is_valid(op1, type0);

 boost::geometry::validity_failure_type type1 =
 boost::geometry::no_failure;
 bool v1 = boost::geometry::is_valid(op2, type1);

 std::vector<polygon> polyOutTemp;
 boost::geometry::difference(op1, op2, polyOutTemp);

 boost::geometry::validity_failure_type type3 =
 boost::geometry::no_failure;
 bool v2 = boost::geometry::is_valid(polyOutTemp[0], type3);

 polyOutTemp[0] is invalid because of self intersections. It seems to be a
 precision issue, since the self intersection occurs in a part of the
 polygon that should not affected by the difference algorithm.

-- 
Ticket URL: <https://svn.boost.org/trac10/ticket/13571>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2018-05-22 14:29:56 UTC