Exemplo n.º 1
0
int
RoutePolars::CalcGlideArrival(const AFlatGeoPoint& origin,
                                const FlatGeoPoint& dest,
                              const FlatProjection &proj) const
{
  const RouteLink e(RoutePoint(dest, 0), origin, proj);
  return origin.altitude - CalcVHeight(e);
}
Exemplo n.º 2
0
RouteLink
RoutePolars::GenerateIntermediate(const RoutePoint& _dest,
                                   const RoutePoint& _origin,
                                   const FlatProjection &proj) const
{
  RouteLink link(_dest, _origin, proj);
  const int vh = CalcVHeight(link) + _dest.altitude;
  if (CanClimb())
    link.second.altitude = std::max(_dest.altitude, std::min(vh, cruise_altitude));
  else
    link.second.altitude = vh;
  return link;
}
Exemplo n.º 3
0
bool
RoutePolars::IsAchievable(const RouteLink& link, const bool check_ceiling) const
{
  if (CanClimb())
    return true;

  if (check_ceiling &&
      config.use_ceiling &&
      link.second.altitude > climb_ceiling)
    return false;

  return link.second.altitude <= cruise_altitude &&
    link.second.altitude - link.first.altitude >= CalcVHeight(link);
}
Exemplo n.º 4
0
GeoPoint
RoutePolars::Intersection(const AGeoPoint &origin,
                          const AGeoPoint &destination,
                          const RasterMap *map, const FlatProjection &proj) const
{
  if (map == nullptr || !map->IsDefined())
    return GeoPoint::Invalid();

  RouteLink e(RoutePoint(proj.ProjectInteger(destination),
                         destination.altitude),
              RoutePoint(proj.ProjectInteger(origin), origin.altitude), proj);
  if (e.d <= 0)
    return GeoPoint::Invalid();

  return map->Intersection(origin,
                           origin.altitude - GetSafetyHeight(),
                           CalcVHeight(e), destination,
                           height_min_working);
}
Exemplo n.º 5
0
bool
RoutePolars::Intersection(const AGeoPoint& origin, const AGeoPoint& destination,
                          const RasterMap* map, const TaskProjection& proj,
                          GeoPoint& intx) const
{
  if (map == nullptr || !map->IsDefined())
    return false;

  RouteLink e(RoutePoint(proj.ProjectInteger(destination),
                         destination.altitude),
              RoutePoint(proj.ProjectInteger(origin), origin.altitude), proj);
  if (!positive(e.d))
    return false;

  const RoughAltitude vh = CalcVHeight(e);
  intx = map->Intersection(origin, (short)(origin.altitude - GetSafetyHeight()),
                           (short)vh, destination);
  return !(intx == destination);
}
Exemplo n.º 6
0
bool
RoutePolars::CheckClearance(const RouteLink &e, const RasterMap* map,
                            const FlatProjection &proj, RoutePoint& inp) const
{
  if (!config.IsTerrainEnabled())
    return true;

  GeoPoint int_x;
  int int_h;
  GeoPoint start = proj.Unproject(e.first);
  GeoPoint dest = proj.Unproject(e.second);

  assert(map);

  if (!map->FirstIntersection(start, e.first.altitude, dest,
                              e.second.altitude, CalcVHeight(e),
                              climb_ceiling, GetSafetyHeight(),
                              int_x, int_h))
    return true;

  inp = RoutePoint(proj.ProjectInteger(int_x), int_h);
  return false;
}