1
0
Fork 0

Updated for magvar calculations.

This commit is contained in:
curt 2000-03-29 00:15:58 +00:00
parent dec30d2090
commit 19d2b1a314
6 changed files with 59 additions and 7 deletions

View file

@ -66,7 +66,7 @@ fgfs_LDADD = \
$(top_builddir)/src/Sky/libSky.a \ $(top_builddir)/src/Sky/libSky.a \
$(top_builddir)/src/Joystick/libJoystick.a \ $(top_builddir)/src/Joystick/libJoystick.a \
$(SERIAL_LIBS) \ $(SERIAL_LIBS) \
-lsgscreen -lsgmath -lsgbucket -lsgdebug -lsgmisc \ -lsgscreen -lsgmath -lsgbucket -lsgdebug -lsgmagvar -lsgmisc \
-lplibpu -lplibfnt -lplibssg -lplibsg \ -lplibpu -lplibfnt -lplibssg -lplibsg \
-lz \ -lz \
$(opengl_LIBS) \ $(opengl_LIBS) \

View file

@ -198,7 +198,10 @@ FGBFI::setTimeGMT (time_t time)
current_options.set_time_offset_type(fgOPTIONS::FG_TIME_GMT_ABSOLUTE); current_options.set_time_offset_type(fgOPTIONS::FG_TIME_GMT_ABSOLUTE);
FGTime::cur_time_params->init( cur_fdm_state->get_Longitude(), FGTime::cur_time_params->init( cur_fdm_state->get_Longitude(),
cur_fdm_state->get_Latitude() ); cur_fdm_state->get_Latitude() );
FGTime::cur_time_params->update( cur_fdm_state->get_Longitude() ); FGTime::cur_time_params->update( cur_fdm_state->get_Longitude(),
cur_fdm_state->get_Latitude(),
cur_fdm_state->get_Altitude()
* FEET_TO_METER );
needReinit(); needReinit();
} }
@ -848,4 +851,30 @@ FGBFI::setVisibility (double visibility)
} }
////////////////////////////////////////////////////////////////////////
// Time
////////////////////////////////////////////////////////////////////////
/**
* Return the magnetic variation
*/
double
FGBFI::getMagVar ()
{
return FGTime::cur_time_params->getMagVar() * RAD_TO_DEG;
}
/**
* Return the magnetic variation
*/
double
FGBFI::getMagDip ()
{
return FGTime::cur_time_params->getMagDip() * RAD_TO_DEG;
}
// end of bfi.cxx // end of bfi.cxx

View file

@ -139,6 +139,10 @@ public:
static void setVisibility (double visiblity); static void setVisibility (double visiblity);
// Time (this varies with time) huh, huh
static double getMagVar ();
static double getMagDip ();
private: private:
// Will cause a linking error if invoked. // Will cause a linking error if invoked.

View file

@ -830,7 +830,9 @@ static void fgMainLoop( void ) {
cur_fdm_state->get_Altitude() * FEET_TO_METER); */ cur_fdm_state->get_Altitude() * FEET_TO_METER); */
// update "time" // update "time"
t->update( cur_fdm_state->get_Longitude() ); t->update( cur_fdm_state->get_Longitude(),
cur_fdm_state->get_Latitude(),
cur_fdm_state->get_Altitude()* FEET_TO_METER );
// Get elapsed time (in usec) for this past frame // Get elapsed time (in usec) for this past frame
elapsed = fgGetTimeInterval(); elapsed = fgGetTimeInterval();
@ -1332,7 +1334,7 @@ int main( int argc, char **argv ) {
// cur_fdm_state->get_Latitude() ); // cur_fdm_state->get_Latitude() );
// FGTime::cur_time_params->update( cur_fdm_state->get_Longitude() ); // FGTime::cur_time_params->update( cur_fdm_state->get_Longitude() );
FGTime::cur_time_params->init( 0.0, 0.0 ); FGTime::cur_time_params->init( 0.0, 0.0 );
FGTime::cur_time_params->update( 0.0 ); FGTime::cur_time_params->update( 0.0, 0.0, 0.0 );
// Do some quick general initializations // Do some quick general initializations
if( !fgInitGeneral()) { if( !fgInitGeneral()) {

View file

@ -51,6 +51,7 @@
#include <simgear/constants.h> #include <simgear/constants.h>
#include <simgear/debug/logstream.hxx> #include <simgear/debug/logstream.hxx>
#include <simgear/magvar/magvar.hxx>
#include <simgear/misc/fgpath.hxx> #include <simgear/misc/fgpath.hxx>
#include <FDM/flight.hxx> #include <FDM/flight.hxx>
@ -336,7 +337,7 @@ double FGTime::sidereal_course(double lng)
// Update time variables such as gmt, julian date, and sidereal time // Update time variables such as gmt, julian date, and sidereal time
void FGTime::update( double lon ) { void FGTime::update( double lon, double lat, double alt_m ) {
double gst_precise, gst_course; double gst_precise, gst_course;
FG_LOG( FG_EVENT, FG_DEBUG, "Updating time" ); FG_LOG( FG_EVENT, FG_DEBUG, "Updating time" );
@ -393,6 +394,13 @@ void FGTime::update( double lon ) {
gst = sidereal_course( 0.00 ) + gst_diff; gst = sidereal_course( 0.00 ) + gst_diff;
lst = sidereal_course( -(lon * RAD_TO_DEG)) + gst_diff; lst = sidereal_course( -(lon * RAD_TO_DEG)) + gst_diff;
} }
// Calculate local magnetic variation
double field[6];
// cout << "alt_m = " << alt_m << endl;
magvar = SGMagVar( lat, lon, alt_m / 1000.0, jd, field );
magdip = atan(field[5]/pow(field[3]*field[3]+field[4]*field[4],0.5));
FG_LOG( FG_EVENT, FG_DEBUG, FG_LOG( FG_EVENT, FG_DEBUG,
" Current lon=0.00 Sidereal Time = " << gst ); " Current lon=0.00 Sidereal Time = " << gst );
FG_LOG( FG_EVENT, FG_DEBUG, FG_LOG( FG_EVENT, FG_DEBUG,

View file

@ -103,6 +103,10 @@ private:
// Paused? // Paused?
bool pause; bool pause;
// Local magnetic variation and dip in radians
double magvar;
double magdip;
void local_update_sky_and_lighting_params( void ); void local_update_sky_and_lighting_params( void );
public: public:
@ -110,6 +114,7 @@ public:
FGTime(); FGTime();
~FGTime(); ~FGTime();
inline double getJD() const { return jd; };
inline double getMjd() const { return mjd; }; inline double getMjd() const { return mjd; };
inline double getLst() const { return lst; }; inline double getLst() const { return lst; };
inline double getGst() const { return gst; }; inline double getGst() const { return gst; };
@ -125,7 +130,7 @@ public:
void init( double lon, double lat ); void init( double lon, double lat );
// Update the time dependent variables // Update the time dependent variables
void update( double lon ); void update( double lon, double lat, double alt_m );
void updateLocal(); void updateLocal();
void cal_mjd (int mn, double dy, int yr); void cal_mjd (int mn, double dy, int yr);
@ -143,6 +148,10 @@ public:
char* format_time( const struct tm* p, char* buf ); char* format_time( const struct tm* p, char* buf );
long int fix_up_timezone( long int timezone_orig ); long int fix_up_timezone( long int timezone_orig );
// Return magnetic variations
double getMagVar() const { return magvar; }
double getMagDip() const { return magdip; }
}; };