// // Created by villuton on 24.03.25. // #ifndef NMEA0183_MATH_H #define NMEA0183_MATH_H /* * G math units */ #define NMEA_PI (3.141592653589793) /**< PI value */ #define NMEA_PI180 (NMEA_PI / 180) /**< PI division by 180 */ #define NMEA_EARTHRADIUS_KM (6378) /**< Earth's mean radius in km */ #define NMEA_EARTHRADIUS_M (NMEA_EARTHRADIUS_KM * 1000) /**< Earth's mean radius in m */ #define NMEA_EARTH_SEMIMAJORAXIS_M (6378137.0) /**< Earth's semi-major axis in m according WGS84 */ #define NMEA_EARTH_SEMIMAJORAXIS_KM (NMEA_EARTHMAJORAXIS_KM / 1000) /**< Earth's semi-major axis in km according WGS 84 */ #define NMEA_EARTH_FLATTENING (1 / 298.257223563) /**< Earth's flattening according WGS 84 */ #define NMEA_DOP_FACTOR (5) /**< Factor for translating DOP to meters */ /* * degree VS radian */ double nmeaDegreeToRadian(double val); double nmeaRadianToDegree(double val); /* * NDEG (NMEA degree) */ double nmeaNdegToDegree(double val); double nmeaDegreeToNdeg(double val); double nmeaNdegToRadian(double val); double nmeaRadianToNdeg(double val); /* * DOP */ double nmeaCalcPdop(double hdop, double vdop); double nmeaDopToMeters(double dop); double nmeaMetersToDop(double meters); /* * positions work */ double nmeaCalcDistance( const double *from_pos_lat, // /**< From position latitude in radians */ const double *from_pos_lon, // /**< From position longitude in radians */ const double *to_pos_lat, // /**< To position latitude in radians */ const double *to_pos_lon // /**< To position longitude in radians */ ); double nmeaCalcDistanceEllipsoid( const double *from_pos_lat, // /**< From position latitude in radians */ const double *from_pos_lon, // /**< From position longitude in radians */ const double *to_pos_lat, // /**< To position latitude in radians */ const double *to_pos_lon, // /**< To position longitude in radians */ double *from_azimuth, // /**< (O) azimuth at "from" position in radians */ double *to_azimuth // /**< (O) azimuth at "to" position in radians */ ); int nmeaMoveHorz( const double *start_pos_lat, // /**< Start position latitude in radians */ const double *start_pos_lon, // /**< Start position longitude in radians */ double *end_pos_lat, // /**< Result position latitude in radians */ double *end_pos_lon, // /**< Result position longitude in radians */ double azimuth, // /**< Azimuth (degree) [0, 359] */ double distance // /**< Distance (km) */ ); int nmeaMoveHorzEllipsoid( const double *start_pos_lat, // /**< Start position latitude in radians */ const double *start_pos_lon, // /**< Start position longitude in radians */ double *end_pos_lat, // /**< (O) Result position latitude in radians */ double *end_pos_lon, // /**< (O) Result position longitude in radians */ double azimuth, // /**< Azimuth in radians */ double distance, // /**< Distance (km) */ double *end_azimuth // /**< (O) Azimuth at end position in radians */ ); #endif //NMEA0183_MATH_H