Beispiel #1
0
inline bool
OrderedTask::RunDijsktraMin(const GeoPoint &location)
{
  const unsigned task_size = TaskSize();
  if (task_size < 2)
    return false;

  if (dijkstra_min == nullptr)
    dijkstra_min = new TaskDijkstraMin();
  TaskDijkstraMin &dijkstra = *dijkstra_min;

  const unsigned active_index = GetActiveIndex();
  dijkstra.SetTaskSize(task_size - active_index);
  for (unsigned i = active_index; i != task_size; ++i) {
    const SearchPointVector &boundary = task_points[i]->GetSearchPoints();
    dijkstra.SetBoundary(i - active_index, boundary);
  }

  SearchPoint ac(location, task_projection);
  if (!dijkstra.DistanceMin(ac))
    return false;

  for (unsigned i = active_index; i != task_size; ++i)
    SetPointSearchMin(i, dijkstra.GetSolution(i - active_index));

  return true;
}
Beispiel #2
0
fixed
OrderedTask::ScanDistanceMin(const GeoPoint &location, bool full)
{
  if (full) {
    if (dijkstra_min == NULL)
      dijkstra_min = new TaskDijkstraMin(*this);

    SearchPoint ac(location, task_projection);
    if (dijkstra_min->DistanceMin(ac)) {
      for (unsigned i = GetActiveIndex(), end = TaskSize(); i != end; ++i)
        SetPointSearchMin(i, dijkstra_min->GetSolution(i));
    }

    last_min_location = location;
  }

  return taskpoint_start->ScanDistanceMin();
}
Beispiel #3
0
void 
OrderedTask::set_tp_search_achieved(unsigned tp, const SearchPoint &sol) 
{
  if (task_points[tp]->HasSampled())
    SetPointSearchMin(tp, sol);
}