Nmea0183Parser/Inc/Nmea0183_Math.h

71 lines
2.7 KiB
C

//
// Created by villuton on 24.03.25.
//
#ifndef NMEA0183_MATH_H
#define NMEA0183_MATH_H
/*
* G math units
*/
#include "Nmea0183_Sentence.h"
#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(
tNmeaPositionDouble *from_pos, // /**< From position in radians */
tNmeaPositionDouble *to_pos // /**< To position in radians */
);
double nmeaCalcDistanceEllipsoid(
tNmeaPositionDouble *from_pos, // /**< From position in radians */
tNmeaPositionDouble *to_pos, // /**< To position in radians */
double *from_azimuth, // /**< (O) azimuth at "from" position in radians */
double *to_azimuth // /**< (O) azimuth at "to" position in radians */
);
int nmeaMoveHorz(
tNmeaPositionDouble *start_pos, // /**< Start position in radians */
tNmeaPositionDouble *end_pos, // /**< Result position in radians */
double azimuth, // /**< Azimuth (degree) [0, 359] */
double distance // /**< Distance (km) */
);
int nmeaMoveHorzEllipsoid(
tNmeaPositionDouble *start_pos, // /**< Start position in radians */
tNmeaPositionDouble *end_pos, // /**< Result position 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