X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FNavaids%2Fnavrecord.cxx;h=a22bebb69b431f7f6dec13701adb0a6318531488;hb=0e53e2cbb1e7f511c40121ade43a539d15e0e155;hp=e75339804036ea7fbb73b929a1b64fe15d3184e6;hpb=6b90dc26216cc45129d74a336c74dfc31085c87b;p=flightgear.git diff --git a/src/Navaids/navrecord.cxx b/src/Navaids/navrecord.cxx index e75339804..a22bebb69 100644 --- a/src/Navaids/navrecord.cxx +++ b/src/Navaids/navrecord.cxx @@ -82,6 +82,7 @@ FGNavRecord::FGNavRecord(Type aTy, const std::string& aIdent, } } + init(true); // init FGPositioned (now position is adjusted) } void FGNavRecord::initAirportRelation() @@ -181,6 +182,38 @@ void FGNavRecord::alignLocaliserWithRunway(double aThreshold) } } +double FGNavRecord::localizerWidth() const +{ + if (!mRunway) { + return 6.0; + } + + SGVec3d thresholdCart(SGVec3d::fromGeod(mRunway->threshold())); + double axisLength = dist(cart(), thresholdCart); + double landingLength = dist(thresholdCart, SGVec3d::fromGeod(mRunway->end())); + +// Reference: http://dcaa.slv.dk:8000/icaodocs/ +// ICAO standard width at threshold is 210 m = 689 feet = approx 700 feet. +// ICAO 3.1.1 half course = DDM = 0.0775 +// ICAO 3.1.3.7.1 Sensitivity 0.00145 DDM/m at threshold +// implies peg-to-peg of 214 m ... we will stick with 210. +// ICAO 3.1.3.7.1 "Course sector angle shall not exceed 6 degrees." + +// Very short runway: less than 1200 m (4000 ft) landing length: + if (landingLength < 1200.0) { +// ICAO fudges localizer sensitivity for very short runways. +// This produces a non-monotonic sensitivity-versus length relation. + axisLength += 1050.0; + } + +// Example: very short: San Diego KMYF (Montgomery Field) ILS RWY 28R +// Example: short: Tom's River KMJX (Robert J. Miller) ILS RWY 6 +// Example: very long: Denver KDEN (Denver) ILS RWY 16R + double raw_width = 210.0 / axisLength * SGD_RADIANS_TO_DEGREES; + return raw_width < 6.0? raw_width : 6.0; + +} + FGTACANRecord::FGTACANRecord(void) : channel(""), freq(0)