]> git.mxchange.org Git - flightgear.git/commitdiff
Updates [hack] from David Megginson so VOR reception range scales with
authorcurt <curt>
Tue, 30 May 2000 16:49:44 +0000 (16:49 +0000)
committercurt <curt>
Tue, 30 May 2000 16:49:44 +0000 (16:49 +0000)
altitude.

src/Cockpit/radiostack.cxx
src/Navaids/navlist.cxx

index 80db998ed8d013132d5a5fdc103bc0a68005594c..e6c048db0146c77c25a20db96d56c4138e811bf8 100644 (file)
 
 #include "radiostack.hxx"
 
+/**
+ * Boy, this is ugly!  Make the VOR range vary by altitude difference.
+ */
+static inline double
+kludgeRange (double stationElev, double aircraftElev, double nominalRange)
+{
+                               // Assume that the nominal range (usually
+                               // 50nm) applies at a 5,000 ft difference.
+                               // Just a wild guess!
+  double factor = ((aircraftElev*METER_TO_FEET) - stationElev) / 5000.0;
+  double range = fabs(nominalRange * factor);
+
+                               // Clamp the range to keep it sane; for
+                               // now, never less than 25% or more than
+                               // 500% of nominal range.
+  if (range < nominalRange/4.0) {
+    range = nominalRange/4.0;
+  } else if (range > nominalRange*5.0) {
+    range = nominalRange*5.0;
+  }
+
+  return range;
+}
+
 
 FGRadioStack *current_radiostack;
 
@@ -205,7 +229,7 @@ void FGRadioStack::search( double lon, double lat, double elev ) {
        nav1_loclon = nav.get_lon();
        nav1_loclat = nav.get_lat();
        nav1_elev = nav.get_elev();
-       nav1_effective_range = nav.get_range();
+       nav1_effective_range = kludgeRange(nav1_elev, elev, nav.get_range());
        nav1_target_gs = 0.0;
        nav1_radial = nav1_sel_radial;
        nav1_x = nav1_dme_x = nav.get_x();
@@ -251,7 +275,7 @@ void FGRadioStack::search( double lon, double lat, double elev ) {
        nav2_loclon = nav.get_lon();
        nav2_loclat = nav.get_lat();
        nav2_elev = nav.get_elev();
-       nav2_effective_range = nav.get_range();
+       nav2_effective_range = kludgeRange(nav2_elev, elev, nav.get_range());
        nav2_target_gs = 0.0;
        nav2_radial = nav2_sel_radial;
        nav2_x = nav2_dme_x = nav.get_x();
@@ -271,7 +295,7 @@ void FGRadioStack::search( double lon, double lat, double elev ) {
        adf_lon = nav.get_lon();
        adf_lat = nav.get_lat();
        adf_elev = nav.get_elev();
-       adf_effective_range = nav.get_range();
+       adf_effective_range = kludgeRange(adf_elev, elev, nav.get_range());
        adf_x = nav.get_x();
        adf_y = nav.get_y();
        adf_z = nav.get_z();
index 432d23c676d7d506e08653c82760d0a6b2cca8d0..75f15ee90a8c5c116b23b21b78e5cfbdd0c4d348 100644 (file)
@@ -131,7 +131,7 @@ bool FGNavList::query( double lon, double lat, double elev, double freq,
        // cout << "  dist = " << sqrt(d)
        //      << "  range = " << current->get_range() * NM_TO_METER << endl;
        if ( d < (current->get_range() * NM_TO_METER 
-                 * current->get_range() * NM_TO_METER) ) {
+                 * current->get_range() * NM_TO_METER * 5.0) ) {
            // cout << "matched = " << current->get_ident() << endl;
            *n = *current;
            return true;