]> git.mxchange.org Git - flightgear.git/commitdiff
Added a function to determine whether a point is on a given runway
authordaveluff <daveluff>
Tue, 11 Mar 2003 13:25:14 +0000 (13:25 +0000)
committerdaveluff <daveluff>
Tue, 11 Mar 2003 13:25:14 +0000 (13:25 +0000)
src/ATC/ATCutils.cxx
src/ATC/ATCutils.hxx

index eb89d579a4fbb92375e03a15c691ff656ea76f90..59b32f2ab5a15ac27d2bf9e2b75a1b1d97d87d7c 100644 (file)
@@ -30,6 +30,7 @@
 #include <Main/globals.hxx>
 
 #include "ATCutils.hxx"
+#include "ATCProjection.hxx"
 
 // Convert any number to spoken digits
 string ConvertNumToSpokenDigits(string n) {
@@ -280,3 +281,25 @@ double dclGetAirportElev( const string& id ) {
         return -9999.0;
     }
 }
+
+// Runway stuff
+// Given a Point3D (lon/lat/elev) and an FGRunway struct, determine if the point lies on the runway
+bool OnRunway(Point3D pt, FGRunway* rwy) {
+       FGATCAlignedProjection ortho;
+       Point3D centre(rwy->lon, rwy->lat, 0.0);        // We don't need the elev
+       ortho.Init(centre, rwy->heading);
+       
+       Point3D xyc = ortho.ConvertToLocal(centre);
+       Point3D xyp = ortho.ConvertToLocal(pt);
+       
+       //cout << "Length offset = " << fabs(xyp.y() - xyc.y()) << '\n';
+       //cout << "Width offset = " << fabs(xyp.x() - xyc.x()) << '\n';
+       
+       if((fabs(xyp.y() - xyc.y()) < ((rwy->length/2.0) + 5.0)) 
+               && (fabs(xyp.x() - xyc.x()) < (rwy->width/2.0))) {
+               return(true);
+       }
+       
+       return(false);
+}
+       
index d009c888733a288c89bdfe04036d74e7d9a15d15..9ab479884b8b6764d2f6386570453a56e815b429 100644 (file)
@@ -19,6 +19,7 @@
 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 #include <Airports/simple.hxx>
+#include <Airports/runways.hxx>
 
 #include <math.h>
 #include <simgear/math/point3d.hxx>
@@ -91,3 +92,12 @@ bool dclFindAirportID( const string& id, FGAirport *a );
 
 // get airport elevation
 double dclGetAirportElev( const string& id );
+
+/****************
+*
+* Runways
+*
+****************/
+
+// Given a Point3D (lon/lat/elev) and an FGRunway struct, determine if the point lies on the runway
+bool OnRunway(Point3D pt, FGRunway* rwy);