Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r74170 - in trunk: boost/geometry/policies/relate libs/geometry/test/algorithms libs/geometry/test/algorithms/overlay
From: barend.gehrels_at_[hidden]
Date: 2011-08-30 17:16:51


Author: barendgehrels
Date: 2011-08-30 17:16:50 EDT (Tue, 30 Aug 2011)
New Revision: 74170
URL: http://svn.boost.org/trac/boost/changeset/74170

Log:
Bugfix (robustness issue) based on ticket ggl-list by Christophe, dated Aug 20, 2011
Phase 1, it still has to be reworked
Text files modified:
   trunk/boost/geometry/policies/relate/intersection_points.hpp | 11 ++++++++++-
   trunk/libs/geometry/test/algorithms/difference.cpp | 6 ++++++
   trunk/libs/geometry/test/algorithms/intersection.cpp | 4 ++--
   trunk/libs/geometry/test/algorithms/overlay/overlay_cases.hpp | 7 +++++++
   trunk/libs/geometry/test/algorithms/union.cpp | 2 +-
   5 files changed, 26 insertions(+), 4 deletions(-)

Modified: trunk/boost/geometry/policies/relate/intersection_points.hpp
==============================================================================
--- trunk/boost/geometry/policies/relate/intersection_points.hpp (original)
+++ trunk/boost/geometry/policies/relate/intersection_points.hpp 2011-08-30 17:16:50 EDT (Tue, 30 Aug 2011)
@@ -70,7 +70,16 @@
         promoted_type const da = (promoted_type(dx2) * wy) - (promoted_type(dy2) * wx);
 
         // r: ratio 0-1 where intersection divides A/B
- promoted_type const r = da / d;
+ promoted_type r = da / d;
+ // Handle robustness issues
+ if (r < 0)
+ {
+ r = 0;
+ }
+ else if (r > 1)
+ {
+ r = 1;
+ }
 
         result.count = 1;
         set<0>(result.intersections[0],

Modified: trunk/libs/geometry/test/algorithms/difference.cpp
==============================================================================
--- trunk/libs/geometry/test/algorithms/difference.cpp (original)
+++ trunk/libs/geometry/test/algorithms/difference.cpp 2011-08-30 17:16:50 EDT (Tue, 30 Aug 2011)
@@ -224,6 +224,12 @@
         1, 0, 58456.4964294434
         );
 
+ test_one<polygon, polygon, polygon>("ggl_list_20110820_christophe",
+ ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1],
+ 1, 0, 2.8570121719168924,
+ 1, 0, 64.498061986388564);
+
+
 
 #ifdef _MSC_VER
     // 2011-07-02

Modified: trunk/libs/geometry/test/algorithms/intersection.cpp
==============================================================================
--- trunk/libs/geometry/test/algorithms/intersection.cpp (original)
+++ trunk/libs/geometry/test/algorithms/intersection.cpp 2011-08-30 17:16:50 EDT (Tue, 30 Aug 2011)
@@ -166,7 +166,7 @@
     test_one<Polygon, Polygon, Polygon>("isovist",
         isovist1[0], isovist1[1],
         1,
- if_typed<ct, float>(19, if_typed<ct, double>(22, 20)),
+ if_typed<ct, float>(19, if_typed<ct, double>(20, 20)),
         88.19203,
         if_typed<ct, float>(0.5, if_typed<ct, double>(0.1, 0.01)));
 #endif
@@ -191,7 +191,7 @@
     test_one<Polygon, Polygon, Polygon>("ggl_list_20110716_enrico",
         ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
         3,
- if_typed<ct, float>(20, 22),
+ if_typed<ct, float>(19, if_typed<ct, double>(22, 21)),
         35723.8506317139);
 #endif
 

Modified: trunk/libs/geometry/test/algorithms/overlay/overlay_cases.hpp
==============================================================================
--- trunk/libs/geometry/test/algorithms/overlay/overlay_cases.hpp (original)
+++ trunk/libs/geometry/test/algorithms/overlay/overlay_cases.hpp 2011-08-30 17:16:50 EDT (Tue, 30 Aug 2011)
@@ -512,6 +512,13 @@
     };
 
 
+static std::string ggl_list_20110820_christophe[2] =
+{
+ "POLYGON((17.763942722600319 32.23605727739968,19.192448808558737 30.807551191441263,16.000000000000000 30.000000000000000,17.763942722600319 32.236057277399681))",
+ "POLYGON((0.24806946917841693 26.015444246572663,31.751930530821582 33.984555753427337,32.248069469178418 30.015444246572663,0.24806946917841693 26.015444246572663))"
+};
+
+
 // GEOS "TestOverlay" test.
 // Note that the first one WAS invalid and is made valid using SQL Server 2008 Spatial MakeValid() function
 static std::string geos_1_test_overlay[2] =

Modified: trunk/libs/geometry/test/algorithms/union.cpp
==============================================================================
--- trunk/libs/geometry/test/algorithms/union.cpp (original)
+++ trunk/libs/geometry/test/algorithms/union.cpp 2011-08-30 17:16:50 EDT (Tue, 30 Aug 2011)
@@ -244,7 +244,7 @@
         1,
         0,
         if_typed<ct, float>(71,
- if_typed<ct, double>(72, 73)),
+ if_typed<ct, double>(70, 73)),
         313.36036462);
 #endif
 }


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk