77 lines
3.4 KiB
C
77 lines
3.4 KiB
C
//
|
|
// 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
|