| 34 | // Actual SimplifyDP implementation. |
| 35 | template <typename DistanceFn, typename Iter, typename Out> |
| 36 | void SimplifyDP(Iter first, Iter last, double epsilon, DistanceFn & distFn, Out & out) |
| 37 | { |
| 38 | if (first != last) |
| 39 | { |
| 40 | auto const maxDist = MaxDistance(first, last, distFn); |
| 41 | if (maxDist.first >= epsilon) |
| 42 | { |
| 43 | simpl::SimplifyDP(first, maxDist.second, epsilon, distFn, out); |
| 44 | simpl::SimplifyDP(maxDist.second, last, epsilon, distFn, out); |
| 45 | return; |
| 46 | } |
| 47 | } |
| 48 | out(*last); |
| 49 | } |
| 50 | //@} |
| 51 | |
| 52 | struct SimplifyOptimalRes |