From: mfranz Date: Fri, 12 Oct 2007 20:53:46 +0000 (+0000) Subject: - make weighting factors for search function with target heading permanent X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=73bec9e1f87b3baec9332098b343512853354bf1;p=flightgear.git - make weighting factors for search function with target heading permanent - add "good" offset as suggested by Thomas FOERSTER - minor tweaks --- diff --git a/src/Airports/runways.cxx b/src/Airports/runways.cxx index 0cd66776f..b5770fc82 100644 --- a/src/Airports/runways.cxx +++ b/src/Airports/runways.cxx @@ -29,8 +29,8 @@ #include // sprintf() #include - #include +#include
#include STL_STRING #include @@ -216,9 +216,8 @@ bool FGRunwayList::search( const string& aptid, const int tgt_hdg, // Return the runway number of the runway closest to a given heading -#include
// FIXME remove string FGRunwayList::search( const string& aptid, const int hdg ) { - //SG_LOG(SG_GENERAL, SG_DEBUG, "searching runway for " << aptid + //SG_LOG(SG_GENERAL, SG_ALERT, "searching runway for " << aptid // << " with target heading " << hdg); FGRunway r; @@ -228,10 +227,11 @@ string FGRunwayList::search( const string& aptid, const int hdg ) { return "NN"; } - double LENWGT = fgGetDouble("/tmp/runway-search/length", 0.01); - double WIDWGT = fgGetDouble("/tmp/runway-search/width", 0.01); - double SURFWGT = fgGetDouble("/tmp/runway-search/surface", 10); - double DEVWGT = fgGetDouble("/tmp/runway-search/deviation", 1); + SGPropertyNode *param = fgGetNode("/sim/airport/runways/search", true); + double lenwgt = param->getDoubleValue("length-weight", 0.01); + double widwgt = param->getDoubleValue("width-weight", 0.01); + double surfwgt = param->getDoubleValue("surface-weight", 10); + double devwgt = param->getDoubleValue("deviation-weight", 1); FGRunway best; double max = 0.0; @@ -243,14 +243,14 @@ string FGRunwayList::search( const string& aptid, const int hdg ) { if (r._type != "runway") continue; - int surface = 0; - if (r._surface_code == 1 || r._surface_code == 2) // asphalt & concrete + int surface = 1; + if (r._surface_code == 12 || r._surface_code == 5) // dry lakebed & gravel surface = 2; - else if (r._surface_code == 12 || r._surface_code == 5) // dry lakebed & gravel - surface = 1; + else if (r._surface_code == 1 || r._surface_code == 2) // asphalt & concrete + surface = 3; double quality, bad, diff; - double good = LENWGT * r._length + WIDWGT * r._width + SURFWGT * surface; + double good = lenwgt * r._length + widwgt * r._width + surfwgt * surface + 1e-20; // this side diff = hdg - r._heading; @@ -258,10 +258,10 @@ string FGRunwayList::search( const string& aptid, const int hdg ) { diff += 360; while (diff >= 180) diff -= 360; - bad = fabs(DEVWGT * diff) + 1e-20; + bad = fabs(devwgt * diff) + 1e-20; quality = good / bad; - //SG_LOG(SG_GENERAL, SG_DEBUG, " runway " << r._rwy_no << " -> " << quality); + //SG_LOG(SG_GENERAL, SG_ALERT, " runway " << r._rwy_no << " -> " << quality); if (quality > max) { max = quality; best = r; @@ -274,10 +274,10 @@ string FGRunwayList::search( const string& aptid, const int hdg ) { diff += 360; while (diff >= 180) diff -= 360; - bad = fabs(DEVWGT * diff) + 1e-20; + bad = fabs(devwgt * diff) + 1e-20; quality = good / bad; - //SG_LOG(SG_GENERAL, SG_DEBUG, " runway " << GetReverseRunwayNo(r._rwy_no) + //SG_LOG(SG_GENERAL, SG_ALERT, " runway " << GetReverseRunwayNo(r._rwy_no) // << " -> " << quality); if (quality > max) { max = quality;