X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fnavcom.cxx;h=1850539e03a6f6b30eb2e5e62ff811467c537ed7;hb=fee003e8cc17f0aa9a1e9280dd823d20e231e967;hp=4c763d386f1c463cda026fe22dbaff2a9b8ae1dc;hpb=b2b33f75820359670ca4d8b326370fc3771ee08c;p=flightgear.git diff --git a/src/Cockpit/navcom.cxx b/src/Cockpit/navcom.cxx index 4c763d386..1850539e0 100644 --- a/src/Cockpit/navcom.cxx +++ b/src/Cockpit/navcom.cxx @@ -2,7 +2,7 @@ // // Written by Curtis Olson, started April 2000. // -// Copyright (C) 2000 - 2002 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 2000 - 2002 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -33,7 +33,6 @@ #include #include -#include #include #include "navcom.hxx" @@ -342,7 +341,7 @@ double FGNavCom::adjustILSRange( double stationElev, double aircraftElev, // } else { // return 0; // } - return FG_ILS_DEFAULT_RANGE; + return FG_LOC_DEFAULT_RANGE; } @@ -379,9 +378,9 @@ FGNavCom::update(double dt) double dist = sgdClosestPointToLineDistSquared( p, p0, gs_base_vec ); nav_gs_dist = sqrt( dist ); - // cout << nav_gs_dist; + // cout << "nav_gs_dist = " << nav_gs_dist << endl; - // Point3D tmp( nav_gs_x, nav_gs_y, nav_gs_z ); + Point3D tmp( nav_gs_x, nav_gs_y, nav_gs_z ); // cout << " (" << aircraft.distance3D( tmp ) << ")" << endl; // wgs84 heading to glide slope (to determine sign of distance) @@ -614,12 +613,20 @@ void FGNavCom::search() gs = globals->get_gslist()->findByFreq(nav_freq, lon, lat, elev); } - if ( loc != NULL ) { nav_id = loc->get_ident(); + // cout << "localizer = " << nav_id << endl; nav_valid = true; if ( last_nav_id != nav_id || last_nav_vor ) { nav_trans_ident = loc->get_trans_ident(); + nav_target_radial = loc->get_multiuse(); + while ( nav_target_radial < 0.0 ) { nav_target_radial += 360.0; } + while ( nav_target_radial > 360.0 ) { nav_target_radial -= 360.0; } + nav_loclon = loc->get_lon(); + nav_loclat = loc->get_lat(); + nav_x = loc->get_x(); + nav_y = loc->get_y(); + nav_z = loc->get_z(); last_nav_id = nav_id; last_nav_vor = false; nav_loc = true; @@ -628,23 +635,28 @@ void FGNavCom::search() if ( nav_has_gs ) { nav_gslon = gs->get_lon(); nav_gslat = gs->get_lat(); + nav_elev = gs->get_elev_ft(); int tmp = (int)(gs->get_multiuse() / 1000.0); nav_target_gs = (double)tmp / 100.0; nav_gs_x = gs->get_x(); nav_gs_y = gs->get_y(); nav_gs_z = gs->get_z(); - // derive GS baseline + // derive GS baseline (perpendicular to the runay + // along the ground) double tlon, tlat, taz; geo_direct_wgs_84 ( 0.0, nav_gslat, nav_gslon, nav_target_radial + 90, 100.0, &tlat, &tlon, &taz ); + // cout << "nav_target_radial = " << nav_target_radial << endl; + // cout << "nav_loc = " << nav_loc << endl; // cout << nav_gslon << "," << nav_gslat << " " // << tlon << "," << tlat << " (" << nav_elev << ")" // << endl; Point3D p1 = sgGeodToCart( Point3D(tlon*SGD_DEGREES_TO_RADIANS, tlat*SGD_DEGREES_TO_RADIANS, - nav_elev*SG_FEET_TO_METER) ); + nav_elev*SG_FEET_TO_METER) + ); // cout << nav_gs_x << "," << nav_gs_y << "," << nav_gs_z // << endl; // cout << p1 << endl; @@ -652,19 +664,12 @@ void FGNavCom::search() p1.x()-nav_gs_x, p1.y()-nav_gs_y, p1.z()-nav_gs_z ); // cout << gs_base_vec[0] << "," << gs_base_vec[1] << "," // << gs_base_vec[2] << endl; + } else { + nav_elev = loc->get_elev_ft(); } - nav_loclon = loc->get_lon(); - nav_loclat = loc->get_lat(); - nav_elev = loc->get_elev_ft(); nav_twist = 0; nav_range = FG_LOC_DEFAULT_RANGE; nav_effective_range = nav_range; - nav_target_radial = loc->get_multiuse(); - while ( nav_target_radial < 0.0 ) { nav_target_radial += 360.0; } - while ( nav_target_radial > 360.0 ) { nav_target_radial -= 360.0; } - nav_x = loc->get_x(); - nav_y = loc->get_y(); - nav_z = loc->get_z(); if ( globals->get_soundmgr()->exists( nav_fx_name ) ) { globals->get_soundmgr()->remove( nav_fx_name ); @@ -696,6 +701,7 @@ void FGNavCom::search() } } else if ( nav != NULL ) { nav_id = nav->get_ident(); + // cout << "nav = " << nav_id << endl; nav_valid = true; if ( last_nav_id != nav_id || !last_nav_vor ) { last_nav_id = nav_id;