]> git.mxchange.org Git - flightgear.git/blobdiff - src/Cockpit/navcom.cxx
Melchior FRANZ:
[flightgear.git] / src / Cockpit / navcom.cxx
index 4c763d386f1c463cda026fe22dbaff2a9b8ae1dc..1850539e03a6f6b30eb2e5e62ff811467c537ed7 100644 (file)
@@ -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 <simgear/math/vector.hxx>
 
 #include <Aircraft/aircraft.hxx>
-#include <Navaids/ilslist.hxx>
 #include <Navaids/navlist.hxx>
 
 #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;