X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmath%2Finterpolater.cxx;h=064443ad07233a9319017ded2a87863d7a580284;hb=557fade4a7df3f030b943ba6114c3c566c57b73c;hp=02ab14175355325ec784798bc07cb53b14e9fa1b;hpb=82459a2802a939434f9fc5b88d2b2aea58f0043d;p=simgear.git diff --git a/simgear/math/interpolater.cxx b/simgear/math/interpolater.cxx index 02ab1417..064443ad 100644 --- a/simgear/math/interpolater.cxx +++ b/simgear/math/interpolater.cxx @@ -26,9 +26,7 @@ #include -#ifdef __MWERKS__ #include // for exit() -#endif #include STL_STRING @@ -38,15 +36,17 @@ #include "interpolater.hxx" +SG_USING_STD(string); + // Constructor -- loads the interpolation table from the specified // file -fgINTERPTABLE::fgINTERPTABLE( const string& file ) { - FG_LOG( FG_MATH, FG_INFO, "Initializing Interpolator for " << file ); +SGInterpTable::SGInterpTable( const string& file ) { + SG_LOG( SG_MATH, SG_INFO, "Initializing Interpolator for " << file ); fg_gzifstream in( file ); - if ( !in ) { - FG_LOG( FG_GENERAL, FG_ALERT, "Cannot open file: " << file ); + if ( !in.is_open() ) { + SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << file ); exit(-1); } @@ -55,9 +55,10 @@ fgINTERPTABLE::fgINTERPTABLE( const string& file ) { while ( in ) { if ( size < MAX_TABLE_SIZE ) { in >> table[size][0] >> table[size][1]; + in >> skipws; size++; } else { - FG_LOG( FG_MATH, FG_ALERT, + SG_LOG( SG_MATH, SG_ALERT, "fgInterpolateInit(): Exceed max table size = " << MAX_TABLE_SIZE ); exit(-1); @@ -67,28 +68,31 @@ fgINTERPTABLE::fgINTERPTABLE( const string& file ) { // Given an x value, linearly interpolate the y value from the table -double fgINTERPTABLE::interpolate(double x) { +double SGInterpTable::interpolate(double x) { int i; double y; i = 0; while ( (x > table[i][0]) && (i < size) ) { + // cout << " i = " << i << " table[i][0] = " << table[i][0] << endl; + // cout << " size = " << size << endl; i++; } // printf ("i = %d ", i); if ( (i == 0) && (x < table[0][0]) ) { - FG_LOG( FG_MATH, FG_ALERT, - "fgInterpolateInit(): lookup error, x to small = " << x ); - return(0.0); + SG_LOG( SG_MATH, SG_DEBUG, + "interpolate(): lookup error, x to small = " << x ); + return table[0][1]; } - if ( x > table[i][0] ) { - FG_LOG( FG_MATH, FG_ALERT, - "fgInterpolateInit(): lookup error, x to big = " << x ); - return(0.0); + // cout << " table[size-1][0] = " << table[size-1][0] << endl; + if ( x > table[size-1][0] ) { + SG_LOG( SG_MATH, SG_DEBUG, + "interpolate(): lookup error, x to big = " << x ); + return table[size-1][1]; } // y = y1 + (y0 - y1)(x - x1) / (x0 - x1) @@ -102,7 +106,7 @@ double fgINTERPTABLE::interpolate(double x) { // Destructor -fgINTERPTABLE::~fgINTERPTABLE( void ) { +SGInterpTable::~SGInterpTable( void ) { }