- double delev = elev * METER_TO_FEET - current->get_elev();
- double maxrange = 4200 * delev / 1000;
+ double delev = elev * SG_METER_TO_FEET - current->get_elev();
+
+ // max range is the area under r = 2.4 * alt or r^2 = 4000^2 - alt^2
+ // whichever is smaller. The intersection point is 1538 ...
+ double maxrange2; // feet^2
+ if ( delev < 1538.0 ) {
+ maxrange2 = 2.4 * 2.4 * delev * delev;
+ } else if ( delev < 4000.0 ) {
+ maxrange2 = 4000 * 4000 - delev * delev;
+ } else {
+ maxrange2 = 0.0;
+ }
+ maxrange2 *= SG_FEET_TO_METER * SG_FEET_TO_METER; // convert to meter^2