Exemple #1
0
void
Trace::GetPoints(TracePointVector &v, unsigned min_time,
                 const GeoPoint &location, fixed min_distance) const
{
  /* skip the trace points that are before min_time */
  Trace::const_iterator i = begin(), end = this->end();
  unsigned skipped = 0;
  while (true) {
    if (i == end)
      /* nothing left */
      return;

    if (i->GetTime() >= min_time)
      /* found the first point that is within range */
      break;

    ++i;
    ++skipped;
  }

  assert(skipped < size());

  v.reserve(size() - skipped);
  const unsigned range = ProjectRange(location, min_distance);
  const unsigned sq_range = range * range;
  do {
    v.push_back(*i);
    i.NextSquareRange(sq_range, end);
  } while (i != end);
}
Exemple #2
0
void 
OLCLeague::copy_solution(TracePointVector &vec) const
{
  vec.clear();
  vec.reserve(5);
  if (solution_found) {
    for (unsigned i = 0; i < 5; ++i)
      vec.push_back(best_solution[i]);
  }
}
Exemple #3
0
void
OLCDijkstra::copy_solution(TracePointVector &vec)
{
  vec.clear();
  if (solution_found) {
    vec.reserve(num_stages);
    for (unsigned i = 0; i < num_stages; ++i)
      vec.push_back(best_solution[i]);
  }
}
Exemple #4
0
TracePointVector
Trace::get_trace_points(const unsigned max_points) const
{
  if (max_points == 2) {
    if (trace_tree.size()<2) {
      return TracePointVector();
    }
    // special case - just look for points within time range
    TracePoint p;
    unsigned tmin = (unsigned)-1;
    for (TraceTree::const_iterator tr = trace_tree.begin();
         tr != trace_tree.end(); ++tr) {
      if (inside_time_window(tr->time) && (tr->time< tmin)) {
        p = *tr;
        tmin = tr->time;
      }
    }
    TracePointVector v;
    v.push_back(p);
    v.push_back(m_last_point);
    return v;
  }

  TracePointSet tset(begin(), end());

  if (tset.empty())
    return TracePointVector();

  TracePointList tlist(tset.begin(), tset.end());

  unsigned mrange = 3;

  while (tlist.size() > max_points) {
    thin_trace(tlist, mrange);
    mrange = (mrange * 4) / 3;
  }

  return TracePointVector(tlist.begin(), tlist.end());
}