46#include "JSBSim_API.h"
49# define M_PI 3.14159265358979323846
61 using std::runtime_error::runtime_error;
77 auto seed_value = std::chrono::system_clock::now().time_since_epoch().count();
78 generator.seed(
static_cast<unsigned int>(seed_value));
82 : generator(seed), uniform_random(-1.0, 1.0), normal_random(0.0, 1.0) {}
84 void seed(
unsigned int value) {
85 generator.seed(value);
86 uniform_random.reset();
87 normal_random.reset();
96 std::default_random_engine generator;
97 std::uniform_real_distribution<double> uniform_random;
98 std::normal_distribution<double> normal_random;
131 Filter(
double coeff,
double dt) {
132 prev_in = prev_out = 0.0;
133 double denom = 2.0 + coeff*dt;
135 cb = (2.0 - coeff*dt)/denom;
137 double execute(
double in) {
138 double out = (in + prev_in)*ca + prev_out*cb;
143 void reset(
void) { prev_in = prev_out = 0.0; }
148 static const std::string&
GetVersion(
void) {
return JSBSim_version;}
150 static short debug_lvl;
156 return 1.8*kelvin - 459.4;
163 return celsius * 1.8 + 491.67;
170 return (rankine - 491.67)/1.8;
191 return (fahrenheit - 32.0)/1.8;
198 return celsius * 1.8 + 32.0;
205 return celsius + 273.15;
212 return kelvin - 273.15;
219 return measure*0.3048;
227 double eps = 2.0*DBL_EPSILON;
228 return std::fabs(a - b) <= eps * std::max<double>(std::fabs(a), std::fabs(b));
236 float eps = 2.0*FLT_EPSILON;
237 return std::fabs(a - b) <= eps * std::max<double>(std::fabs(a), std::fabs(b));
245 return EqualToRoundoff(a, (
float)b);
253 return EqualToRoundoff((
float)a, b);
258 static constexpr double Constrain(
double min,
double value,
double max) {
259 return value<min?(min):(value>max?(max):(value));
262 static constexpr double sign(
double num) {
return num>=0.0?1.0:-1.0;}
265 static constexpr double radtodeg = 180. / M_PI;
266 static constexpr double degtorad = M_PI / 180.;
267 static constexpr double hptoftlbssec = 550.0;
268 static constexpr double psftoinhg = 0.014138;
269 static constexpr double psftopa = 47.88;
270 static constexpr double fttom = 0.3048;
271 static constexpr double ktstofps = 1852./(3600*fttom);
272 static constexpr double fpstokts = 1.0 / ktstofps;
273 static constexpr double inchtoft = 1.0/12.0;
274 static constexpr double m3toft3 = 1.0/(fttom*fttom*fttom);
275 static constexpr double in3tom3 = inchtoft*inchtoft*inchtoft/m3toft3;
276 static constexpr double inhgtopa = 3386.38;
283 static constexpr double slugtolb = 32.174049;
284 static constexpr double lbtoslug = 1.0/slugtolb;
285 static constexpr double kgtolb = 2.20462;
286 static constexpr double kgtoslug = 0.06852168;
287 static const std::string needed_cfg_version;
288 static const std::string JSBSim_version;
290 static std::string CreateIndexedPropertyName(
const std::string& Property,
int index);
294enum {eL = 1, eM, eN };
296enum {eP = 1, eQ, eR };
298enum {eU = 1, eV, eW };
300enum {eX = 1, eY, eZ };
302enum {ePhi = 1, eTht, ePsi };
304enum {eDrag = 1, eSide, eLift };
306enum {eRoll = 1, ePitch, eYaw };
308enum {eNorth = 1, eEast, eDown };
310enum {eLat = 1, eLong, eRad };
312enum {inNone = 0, inDegrees, inRadians, inMeters, inFeet };
First order, (low pass / lag) filter.
static bool EqualToRoundoff(double a, double b)
Finite precision comparison.
static const std::string & GetVersion(void)
Returns the version number of JSBSim.
static constexpr double KelvinToCelsius(double kelvin)
Converts from degrees Kelvin to degrees Celsius.
virtual ~FGJSBBase()
Destructor for FGJSBBase.
static bool EqualToRoundoff(float a, double b)
Finite precision comparison.
static bool EqualToRoundoff(double a, float b)
Finite precision comparison.
FGJSBBase()
Constructor for FGJSBBase.
static constexpr double Constrain(double min, double value, double max)
Constrain a value between a minimum and a maximum value.
static constexpr double KelvinToFahrenheit(double kelvin)
Converts from degrees Kelvin to degrees Fahrenheit.
static constexpr double RankineToKelvin(double rankine)
Converts from degrees Rankine to degrees Kelvin.
static constexpr double CelsiusToRankine(double celsius)
Converts from degrees Celsius to degrees Rankine.
static constexpr double FeetToMeters(double measure)
Converts from feet to meters.
static constexpr double RankineToCelsius(double rankine)
Converts from degrees Rankine to degrees Celsius.
static constexpr double CelsiusToKelvin(double celsius)
Converts from degrees Celsius to degrees Kelvin.
static bool EqualToRoundoff(float a, float b)
Finite precision comparison.
static constexpr double KelvinToRankine(double kelvin)
Converts from degrees Kelvin to degrees Rankine.
static constexpr double FahrenheitToCelsius(double fahrenheit)
Converts from degrees Fahrenheit to degrees Celsius.
static constexpr double CelsiusToFahrenheit(double celsius)
Converts from degrees Celsius to degrees Fahrenheit.
double GetNormalRandomNumber(void)
Get a random number which probability of occurrence is following Gauss normal distribution with a mea...
double GetUniformRandomNumber(void)
Get a random number which probability of occurrence is uniformly distributed over the segment [-1;1(.
RandomNumberGenerator(void)
Default constructor using a seed based on the system clock.
RandomNumberGenerator(unsigned int seed)
Constructor allowing to specify a seed.
void seed(unsigned int value)
Specify a new seed and reinitialize the random generation process.
Main namespace for the JSBSim Flight Dynamics Model.