From e49434ec6c7799a51c192d4d13def636b51f6665 Mon Sep 17 00:00:00 2001 From: Adam Wulkiewicz Date: Tue, 8 Jul 2014 21:16:18 +0200 Subject: [PATCH] [strategies] Add less-comparator for projected_point_ax result in detail::douglas_peucker --- .../cartesian/distance_projected_point_ax.hpp | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/include/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp b/include/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp index a149097dd..ace642f7c 100644 --- a/include/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp +++ b/include/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp @@ -67,12 +67,27 @@ struct projected_point_ax_result {} T atd, xtd; +}; - friend bool operator>(projected_point_ax_result const& left, - projected_point_ax_result const& right) +// This less-comparator may be used as a parameter of detail::douglas_peucker. +// In this simplify strategy distances are compared in 2 places +// 1. to choose the furthest candidate (md < dist) +// 2. to check if the candidate is further than max_distance (max_distance < md) +template +class projected_point_ax_less +{ +public: + projected_point_ax_less(Distance const& max_distance) + : m_max_distance(max_distance) + {} + + template + inline bool operator()(Distance const& left, Distance const& right) const { - return left.atd > right.atd || left.xtd > right.xtd; + return left.xtd < right.xtd && right.atd < m_max_distance.atd; } +private: + Distance const& m_max_distance; }; // This strategy returns 2-component Point/Segment distance.