X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmath%2FSGGeoc.hxx;h=e8f1b0d1b3d4a6471b5b9d705f28497d40a29b32;hb=6a7c2000027cd22eea603e936ddbad1a5bfc8b04;hp=14929dbfdc580876a6410efe91116fe2ac7ae581;hpb=c5d677ac7b879036aa241379cbc32f868c1599bf;p=simgear.git diff --git a/simgear/math/SGGeoc.hxx b/simgear/math/SGGeoc.hxx index 14929dbf..e8f1b0d1 100644 --- a/simgear/math/SGGeoc.hxx +++ b/simgear/math/SGGeoc.hxx @@ -27,14 +27,6 @@ class SGGeoc { public: /// Default constructor, initializes the instance to lat = lon = lat = 0 SGGeoc(void); - /// Initialize from a cartesian vector assumed to be in meters - /// Note that this conversion is relatively expensive to compute - /// depricated - SGGeoc(const SGVec3& cart); - /// Initialize from a geodetic position - /// Note that this conversion is relatively expensive to compute - /// depricated - SGGeoc(const SGGeod& geod); /// Factory from angular values in radians and radius in ft static SGGeoc fromRadFt(double lon, double lat, double radius); @@ -82,6 +74,11 @@ public: /// Set the geocentric radius from the argument given in feet void setRadiusFt(double radius); + SGGeoc advanceRadM(double course, double distance) const; + static double courseRad(const SGGeoc& from, const SGGeoc& to); + static double courseDeg(const SGGeoc& from, const SGGeoc& to); + static double distanceM(const SGGeoc& from, const SGGeoc& to); + private: /// This one is private since construction is not unique if you do /// not know the units of the arguments, use the factory methods for @@ -112,20 +109,6 @@ SGGeoc::SGGeoc(double lon, double lat, double radius) : { } -inline -SGGeoc::SGGeoc(const SGVec3& cart) -{ - SGGeodesy::SGCartToGeoc(cart, *this); -} - -inline -SGGeoc::SGGeoc(const SGGeod& geod) -{ - SGVec3 cart; - SGGeodesy::SGGeodToCart(geod, cart); - SGGeodesy::SGCartToGeoc(cart, *this); -} - inline SGGeoc SGGeoc::fromRadFt(double lon, double lat, double radius) @@ -223,7 +206,7 @@ SGGeoc::getLongitudeDeg(void) const #ifdef SG_GEOC_NATIVE_DEGREE return _lon; #else - return _lon*SGD_DEGREES_TO_RADIANS; + return _lon*SGD_RADIANS_TO_DEGREES; #endif } @@ -234,7 +217,7 @@ SGGeoc::setLongitudeDeg(double lon) #ifdef SG_GEOC_NATIVE_DEGREE _lon = lon; #else - _lon = lon*SGD_RADIANS_TO_DEGREES; + _lon = lon*SGD_DEGREES_TO_RADIANS; #endif } @@ -267,7 +250,7 @@ SGGeoc::getLatitudeDeg(void) const #ifdef SG_GEOC_NATIVE_DEGREE return _lat; #else - return _lat*SGD_DEGREES_TO_RADIANS; + return _lat*SGD_RADIANS_TO_DEGREES; #endif } @@ -278,7 +261,7 @@ SGGeoc::setLatitudeDeg(double lat) #ifdef SG_GEOC_NATIVE_DEGREE _lat = lat; #else - _lat = lat*SGD_RADIANS_TO_DEGREES; + _lat = lat*SGD_DEGREES_TO_RADIANS; #endif } @@ -310,6 +293,36 @@ SGGeoc::setRadiusFt(double radius) _radius = radius*SG_FEET_TO_METER; } +inline +SGGeoc +SGGeoc::advanceRadM(double course, double distance) const +{ + SGGeoc result; + SGGeodesy::advanceRadM(*this, course, distance, result); + return result; +} + +inline +double +SGGeoc::courseRad(const SGGeoc& from, const SGGeoc& to) +{ + return SGGeodesy::courseRad(from, to); +} + +inline +double +SGGeoc::courseDeg(const SGGeoc& from, const SGGeoc& to) +{ + return SGMiscd::rad2deg(courseRad(from, to)); +} + +inline +double +SGGeoc::distanceM(const SGGeoc& from, const SGGeoc& to) +{ + return SGGeodesy::distanceM(from, to); +} + /// Output to an ostream template inline