50 lines
1.7 KiB
C++
50 lines
1.7 KiB
C++
|
#ifndef _GLUE_HPP
|
||
|
#define _GLUE_HPP
|
||
|
|
||
|
#include "BodyEnvironment.hpp"
|
||
|
|
||
|
namespace yasim {
|
||
|
|
||
|
// The XYZ coordinate system has Z as the earth's axis, the Y axis
|
||
|
// pointing out the equator at zero longitude, and the X axis pointing
|
||
|
// out the middle of the western hemisphere.
|
||
|
class Glue {
|
||
|
public:
|
||
|
static void calcAlphaBeta(State* s, float* alpha, float* beta);
|
||
|
|
||
|
// Calculates the instantaneous rotation velocities about each
|
||
|
// axis.
|
||
|
static void calcEulerRates(State* s,
|
||
|
float* roll, float* pitch, float* hdg);
|
||
|
|
||
|
static void xyz2geoc(double* xyz,
|
||
|
double* lat, double* lon, double* alt);
|
||
|
static void geoc2xyz(double lat, double lon, double alt,
|
||
|
double* out);
|
||
|
static void xyz2geod(double* xyz,
|
||
|
double* lat, double* lon, double* alt);
|
||
|
static void geod2xyz(double lat, double lon, double alt,
|
||
|
double* out);
|
||
|
|
||
|
static double geod2geocLat(double lat);
|
||
|
static double geoc2geodLat(double lat);
|
||
|
|
||
|
// Returns a global to "local" (north, east, down) matrix. Note
|
||
|
// that the latitude passed in is geoDETic.
|
||
|
static void xyz2nedMat(double lat, double lon, float* out);
|
||
|
|
||
|
// Conversion between a euler triplet and a matrix that transforms
|
||
|
// "local" (north/east/down) coordinates to the aircraft frame.
|
||
|
static void euler2orient(float roll, float pitch, float hdg,
|
||
|
float* out);
|
||
|
static void orient2euler(float* o,
|
||
|
float* roll, float* pitch, float* hdg);
|
||
|
|
||
|
// Returns a geodetic (i.e. gravitational, "level", etc...) "up"
|
||
|
// vector for the specified xyz position.
|
||
|
static void geodUp(double* pos, float* out);
|
||
|
};
|
||
|
|
||
|
}; // namespace yasim
|
||
|
#endif // _GLUE_HPP
|