X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmath%2Fpolar3d.hxx;h=9721dc728b0bf51281727f03bd813487c764573c;hb=6a7c2000027cd22eea603e936ddbad1a5bfc8b04;hp=d5c351d9e9407f1f7b119762b8532a49ee204213;hpb=75f817b39c693b2679ebc4b95bf554e65307c067;p=simgear.git diff --git a/simgear/math/polar3d.hxx b/simgear/math/polar3d.hxx index d5c351d9..9721dc72 100644 --- a/simgear/math/polar3d.hxx +++ b/simgear/math/polar3d.hxx @@ -17,10 +17,9 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -29,60 +28,13 @@ #define _POLAR3D_HXX -#ifndef __cplusplus +#ifndef __cplusplus # error This library requires C++ -#endif +#endif - -#include #include - #include "SGMath.hxx" -/** - * Find the Altitude above the Ellipsoid (WGS84) given the Earth - * Centered Cartesian coordinate vector Distances are specified in - * meters. - * @param cp point specified in cartesian coordinates - * @return altitude above the (wgs84) earth in meters - */ -inline double sgGeodAltFromCart(const Point3D& p) -{ - SGGeod geod; - SGGeodesy::SGCartToGeod(SGVec3(p.x(), p.y(), p.z()), geod); - return geod.getElevationM(); -} - - -/** - * Convert a polar coordinate to a cartesian coordinate. Lon and Lat - * must be specified in radians. The SG convention is for distances - * to be specified in meters - * @param p point specified in polar coordinates - * @return the same point in cartesian coordinates - */ -inline Point3D sgPolarToCart3d(const Point3D& p) -{ - SGVec3 cart; - SGGeodesy::SGGeocToCart(SGGeoc::fromRadM(p.lon(), p.lat(), p.radius()), cart); - return Point3D::fromSGVec3(cart); -} - - -/** - * Convert a cartesian coordinate to polar coordinates (lon/lat - * specified in radians. Distances are specified in meters. - * @param cp point specified in cartesian coordinates - * @return the same point in polar coordinates - */ -inline Point3D sgCartToPolar3d(const Point3D& p) -{ - SGGeoc geoc; - SGGeodesy::SGCartToGeoc(SGVec3(p.x(), p.y(), p.z()), geoc); - return Point3D::fromSGGeoc(geoc); -} - - /** * Calculate new lon/lat given starting lon/lat, and offset radial, and * distance. NOTE: starting point is specifed in radians, distance is @@ -93,7 +45,8 @@ inline Point3D sgCartToPolar3d(const Point3D& p) * @param dist offset distance * @return destination point in polar coordinates */ -Point3D calc_gc_lon_lat( const Point3D& orig, double course, double dist ); +inline Point3D calc_gc_lon_lat(const Point3D& orig, double course, double dist) +{ return Point3D::fromSGGeoc(orig.toSGGeoc().advanceRadM(course, dist)); } /** @@ -103,20 +56,14 @@ Point3D calc_gc_lon_lat( const Point3D& orig, double course, double dist ); * @param course resulting course * @param dist resulting distance */ -void calc_gc_course_dist( const Point3D& start, const Point3D& dest, - double *course, double *dist ); - -#if 0 -/** - * Calculate course/dist given two spherical points. - * @param start starting point - * @param dest ending point - * @param course resulting course - * @param dist resulting distance - */ -void calc_gc_course_dist( const Point3D& start, const Point3D& dest, - double *course, double *dist ); -#endif // 0 +inline void calc_gc_course_dist( const Point3D& start, const Point3D& dest, + double *course, double *dist ) +{ + SGGeoc gs = start.toSGGeoc(); + SGGeoc gd = dest.toSGGeoc(); + *course = SGGeoc::courseRad(gs, gd); + *dist = SGGeoc::distanceM(gs, gd); +} #endif // _POLAR3D_HXX