X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAirports%2Frunwaybase.cxx;h=4f60682a9a75b36ecaacee90276e70be39349fcd;hb=c068049d840c2f4567c7d07e7fb37247d8e23407;hp=fd82406ad9a0696258a5a034d9551b9d2db783a9;hpb=f9de92f53db91c45e4bd885ba606749e9597fdbb;p=flightgear.git diff --git a/src/Airports/runwaybase.cxx b/src/Airports/runwaybase.cxx index fd82406ad..4f60682a9 100644 --- a/src/Airports/runwaybase.cxx +++ b/src/Airports/runwaybase.cxx @@ -1,6 +1,6 @@ // runwaybase.cxx -- a base class for runways and taxiways // -// Written by James Turber, started December 2008. +// Written by James Turner, started December 2008. // // Copyright (C) 2000 Curtis L. Olson - http://www.flightgear.org/~curt // @@ -26,6 +26,7 @@ #endif #include +#include #include "runwaybase.hxx" @@ -45,13 +46,12 @@ using std::string; * 12 - lakebed */ -FGRunwayBase::FGRunwayBase(Type aTy, const string& aIdent, +FGRunwayBase::FGRunwayBase(PositionedID aGuid, Type aTy, const string& aIdent, const SGGeod& aGeod, const double heading, const double length, const double width, - const int surface_code, - bool index) : - FGPositioned(aTy, aIdent, aGeod, index) + const int surface_code) : + FGPositioned(aGuid, aTy, aIdent, aGeod) { _heading = heading; _length = length; @@ -60,27 +60,40 @@ FGRunwayBase::FGRunwayBase(Type aTy, const string& aIdent, } SGGeod FGRunwayBase::pointOnCenterline(double aOffset) const +{ + SGGeod result = SGGeodesy::direct(geod(), _heading, aOffset); + result.setElevationM(geod().getElevationM()); + + return result; +} + +SGGeod FGRunwayBase::pointOffCenterline(double aOffset, double lateralOffset) const { SGGeod result; + SGGeod temp; double dummyAz2; - double halfLengthMetres = lengthM() * 0.5; - - SGGeodesy::direct(mPosition, _heading, - aOffset - halfLengthMetres, + + SGGeodesy::direct(geod(), _heading, aOffset, temp, dummyAz2); + + SGGeodesy::direct(temp, SGMiscd::normalizePeriodic(0, 360,_heading+90.0), + lateralOffset, result, dummyAz2); + return result; } + bool FGRunwayBase::isHardSurface() const { return ((_surface_code == 1) || (_surface_code == 2)); } -FGTaxiway::FGTaxiway(const string& aIdent, +FGTaxiway::FGTaxiway(PositionedID aGuid, + const string& aIdent, const SGGeod& aGeod, const double heading, const double length, const double width, const int surface_code) : - FGRunwayBase(TAXIWAY, aIdent, aGeod, heading, length, width, surface_code, false) + FGRunwayBase(aGuid, TAXIWAY, aIdent, aGeod, heading, length, width, surface_code) { }