Пример #1
0
bool 
AbstractAirspace::Intercept(const AircraftState &state,
                            const GeoPoint &end,
                            const TaskProjection &projection,
                            const AirspaceAircraftPerformance &perf,
                            AirspaceInterceptSolution &solution) const
{
  AirspaceIntersectionVector vis = Intersects(state.location, end,
                                              projection);
  if (vis.empty())
    return false;

  AirspaceInterceptSolution this_solution =
    AirspaceInterceptSolution::Invalid();
  for (auto it = vis.begin(); it != vis.end(); ++it)
    Intercept(state, perf, this_solution, it->first, it->second);

  if (!this_solution.IsValid())
    return false;

  solution = this_solution;
  return true;
}
bool 
AbstractAirspace::intercept(const AIRCRAFT_STATE &state,
                            const GeoVector& vec,
                            const AirspaceAircraftPerformance& perf,
                            AirspaceInterceptSolution &solution) const
{
  AirspaceIntersectionVector vis = intersects(state.Location, vec);
  if (vis.empty()) {
    return false;
  }

  AirspaceInterceptSolution this_solution;
  for (AirspaceIntersectionVector::const_iterator it = vis.begin();
       it != vis.end(); ++it) {
    intercept(state, perf, this_solution, it->first, it->second);
  }

  if (this_solution.valid()) {
    solution = this_solution;
    return true;
  } else {
    return false;
  }
}