From 46261bb51b77c22fc7c2caa28d14d79d8def2b51 Mon Sep 17 00:00:00 2001 From: daveluff Date: Tue, 11 Mar 2003 13:25:14 +0000 Subject: [PATCH] Added a function to determine whether a point is on a given runway --- src/ATC/ATCutils.cxx | 23 +++++++++++++++++++++++ src/ATC/ATCutils.hxx | 10 ++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/ATC/ATCutils.cxx b/src/ATC/ATCutils.cxx index eb89d579a..59b32f2ab 100644 --- a/src/ATC/ATCutils.cxx +++ b/src/ATC/ATCutils.cxx @@ -30,6 +30,7 @@ #include
#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); +} + diff --git a/src/ATC/ATCutils.hxx b/src/ATC/ATCutils.hxx index d009c8887..9ab479884 100644 --- a/src/ATC/ATCutils.hxx +++ b/src/ATC/ATCutils.hxx @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include +#include #include #include @@ -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); -- 2.39.5