]> git.mxchange.org Git - flightgear.git/commitdiff
Add a "signed" distance to the GS transmitter. When you are in the approach
authorcurt <curt>
Wed, 22 Jan 2003 01:24:32 +0000 (01:24 +0000)
committercurt <curt>
Wed, 22 Jan 2003 01:24:32 +0000 (01:24 +0000)
hemisphere the distance is positive, if you are in the departure hemisphere
the distance is negature.  (Possible use for graphing approach distance
vs. glide slope or cdi.)

src/Cockpit/navcom.cxx
src/Cockpit/navcom.hxx
src/Network/native_gui.cxx

index a7a62cc09fd7fccd0407e1916a3e227ba61fba21..e621ddbf28cdb5dc725d56c4531d3e22f4819df1 100644 (file)
@@ -323,12 +323,33 @@ FGNavCom::update(double dt)
        if ( nav_has_gs ) {
            station = Point3D( nav_gs_x, nav_gs_y, nav_gs_z );
            nav_gs_dist = aircraft.distance3D( station );
+            // wgs84 heading to glide slope
+            geo_inverse_wgs_84( elev,
+                                lat * SGD_RADIANS_TO_DEGREES,
+                                lon * SGD_RADIANS_TO_DEGREES, 
+                                nav_gslat, nav_gslon,
+                                &az1, &az2, &s );
+            double r = az1 - nav_radial;
+            while ( r >  180.0 ) { r -= 360.0;}
+            while ( r < -180.0 ) { r += 360.0;}
+            if ( r >= -90.0 && r <= 90.0 ) {
+                nav_gs_dist_signed = nav_gs_dist;
+            } else {
+                nav_gs_dist_signed = -nav_gs_dist;
+            }
+            /* cout << "Target Radial = " << nav_radial 
+                 << "  Bearing = " << az1
+                 << "  dist (signed) = " << nav_gs_dist_signed
+                 << endl; */
+            
        } else {
            nav_gs_dist = 0.0;
        }
        
-       // wgs84 heading
-       geo_inverse_wgs_84( elev, lat * SGD_RADIANS_TO_DEGREES, lon * SGD_RADIANS_TO_DEGREES, 
+       // wgs84 heading to localizer
+       geo_inverse_wgs_84( elev,
+                            lat * SGD_RADIANS_TO_DEGREES,
+                            lon * SGD_RADIANS_TO_DEGREES, 
                            nav_loclat, nav_loclon,
                            &az1, &az2, &s );
        // cout << "az1 = " << az1 << " magvar = " << nav_magvar << endl;
index b01330ee4b37379563fe605486c0860a424bf930..33a01dcf510606df305a3c3d27ad69233c98fdb1 100644 (file)
@@ -103,6 +103,7 @@ class FGNavCom : public FGSubsystem
     double nav_gs_y;
     double nav_gs_z;
     double nav_gs_dist;
+    double nav_gs_dist_signed;
     SGTimeStamp prev_time;
     SGTimeStamp curr_time;
     double nav_elev;
@@ -208,6 +209,7 @@ public:
     inline double get_nav_gslon() const { return nav_gslon; }
     inline double get_nav_gslat() const { return nav_gslat; }
     inline double get_nav_gs_dist() const { return nav_gs_dist; }
+    inline double get_nav_gs_dist_signed() const { return nav_gs_dist_signed; }
     inline double get_nav_elev() const { return nav_elev; }
     inline double get_nav_heading() const { return nav_heading; }
     inline double get_nav_radial() const { return nav_radial; }
index 46ee30bdc6b89bfbc88f4ad1b814f4978529910d..30261b140a638e358ea200d286409cc7a4a52d42 100644 (file)
@@ -154,8 +154,9 @@ void FGProps2NetGUI( FGNetGUI *net ) {
 
     if ( current_radiostack->get_navcom1()->get_nav_loc() ) {
         // is an ILS
-        net->dist_nm = current_radiostack->get_navcom1()->get_nav_gs_dist()
-            * SG_METER_TO_NM;
+        net->dist_nm
+            = current_radiostack->get_navcom1()->get_nav_gs_dist_signed()
+              * SG_METER_TO_NM;
     } else {
         // is a VOR
         net->dist_nm = current_radiostack->get_navcom1()->get_nav_loc_dist()