From 31fd0797cc48d8d888a6e8f9e23ebb8019103412 Mon Sep 17 00:00:00 2001 From: Menelaos Karavelas Date: Thu, 24 Apr 2014 01:59:42 +0300 Subject: [PATCH 1/3] [set ops][turns] compare turns using the fraction instead of the distance --- .../geometry/algorithms/detail/turns/compare_turns.hpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/boost/geometry/algorithms/detail/turns/compare_turns.hpp b/include/boost/geometry/algorithms/detail/turns/compare_turns.hpp index 5314f9e9a..f06140b7b 100644 --- a/include/boost/geometry/algorithms/detail/turns/compare_turns.hpp +++ b/include/boost/geometry/algorithms/detail/turns/compare_turns.hpp @@ -79,11 +79,10 @@ struct less_seg_dist_other_op } template - static inline bool use_distance(Op const& left, Op const& right) + static inline bool use_fraction(Op const& left, Op const& right) { - return left.enriched.distance < right.enriched.distance - || ( geometry::math::equals(left.enriched.distance, - right.enriched.distance) + return left.fraction < right.fraction + || ( geometry::math::equals(left.fraction, right.fraction) && use_other_id(left, right) ); } @@ -94,7 +93,7 @@ struct less_seg_dist_other_op segment_identifier const& sl = left.operations[OpId].seg_id; segment_identifier const& sr = right.operations[OpId].seg_id; - return sl < sr || ( sl == sr && use_distance(left.operations[OpId], right.operations[OpId]) ); + return sl < sr || ( sl == sr && use_fraction(left.operations[OpId], right.operations[OpId]) ); } }; From 680c826f5804ddcf00deae12ecb0fb6d6c887f22 Mon Sep 17 00:00:00 2001 From: Menelaos Karavelas Date: Thu, 24 Apr 2014 02:00:34 +0300 Subject: [PATCH 2/3] [turns][debug] output the fraction value as part of the debug output --- .../geometry/algorithms/detail/turns/print_turns.hpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/boost/geometry/algorithms/detail/turns/print_turns.hpp b/include/boost/geometry/algorithms/detail/turns/print_turns.hpp index b6ceed3e8..5093c1a80 100644 --- a/include/boost/geometry/algorithms/detail/turns/print_turns.hpp +++ b/include/boost/geometry/algorithms/detail/turns/print_turns.hpp @@ -52,6 +52,11 @@ static inline void print_turns(Geometry1 const& g1, else out << '\n'; + double fraction[2]; + + fraction[0] = turn.operations[0].fraction.numerator() + / turn.operations[0].fraction.denominator(); + out << geometry::operation_char(turn.operations[0].operation) <<": seg: " << turn.operations[0].seg_id.source_index << ", m: " << turn.operations[0].seg_id.multi_index @@ -61,11 +66,15 @@ static inline void print_turns(Geometry1 const& g1, << ", m: " << turn.operations[0].other_id.multi_index << ", r: " << turn.operations[0].other_id.ring_index << ", s: " << turn.operations[0].other_id.segment_index; + out << ", fr: " << fraction[0]; out << ", col?: " << turn.operations[0].is_collinear; out << ' ' << geometry::dsv(turn.point) << ' '; out << '\n'; + fraction[1] = turn.operations[1].fraction.numerator() + / turn.operations[1].fraction.denominator(); + out << geometry::operation_char(turn.operations[1].operation) << ": seg: " << turn.operations[1].seg_id.source_index << ", m: " << turn.operations[1].seg_id.multi_index @@ -75,6 +84,7 @@ static inline void print_turns(Geometry1 const& g1, << ", m: " << turn.operations[1].other_id.multi_index << ", r: " << turn.operations[1].other_id.ring_index << ", s: " << turn.operations[1].other_id.segment_index; + out << ", fr: " << fraction[1]; out << ", col?: " << turn.operations[1].is_collinear; out << ' ' << geometry::dsv(turn.point) << ' '; From 9d293c8c03f9809d617c7fb85f61154355c7f8a6 Mon Sep 17 00:00:00 2001 From: Menelaos Karavelas Date: Thu, 24 Apr 2014 02:01:39 +0300 Subject: [PATCH 3/3] [set ops] degenerate turns have now method_none; update test for isolating points to check for this method --- .../geometry/algorithms/detail/overlay/follow_linear_linear.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp b/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp index fcb840057..c009df00d 100644 --- a/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp @@ -124,7 +124,7 @@ static inline bool is_isolated_point(Turn const& turn, return false; } - if ( turn.method == method_collinear ) + if ( turn.method == method_none ) { BOOST_ASSERT( operation.operation == operation_continue ); return true;