71 lines
2.7 KiB
C
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
|