/** * Calculate error distance, between last through this to next, * if this node is removed. This metric provides for Douglas-Peuker * thinning. * * @param last Point previous in time to this node * @param node This node * @param next Point succeeding this node * * @return Distance error if this node is thinned */ static unsigned DistanceMetric(const TracePoint &last, const TracePoint &node, const TracePoint &next) { const int d_this = last.FlatDistanceTo(node) + node.FlatDistanceTo(next); const int d_rem = last.FlatDistanceTo(next); return abs(d_this - d_rem); }
TraceDelta(const TracePoint &p_last, const TracePoint &p, const TracePoint &p_next) :point(p), elim_time(TimeMetric(p_last, p, p_next)), elim_distance(DistanceMetric(p_last, p, p_next)), delta_distance(p.FlatDistanceTo(p_last)) { assert(elim_distance != null_delta); }
void Update(const TracePoint &p_last, const TracePoint &p_next) { elim_time = TimeMetric(p_last, point, p_next); elim_distance = DistanceMetric(p_last, point, p_next); delta_distance = point.FlatDistanceTo(p_last); }