10using namespace swift::config;
11using namespace swift::misc::aviation;
12using namespace swift::misc::physical_quantities;
14namespace swift::misc::simulation
19 : m_simulationTimeFraction(simulationTimeFraction), m_startSituation(start), m_endSituation(
end)
24 "Time fraction needs to be within [0;1]");
40 else if (deltaDeg < -180.0)
47 SWIFT_VERIFY_X(isAcceptableTimeFraction(timeFraction0to1), Q_FUNC_INFO,
"0..1 fraction needed");
51 if (timeFraction0to1 >= 1.0)
55 if (timeFraction0to1 <= 0.0)
66 const CHeading headingStart = m_startSituation.getHeading();
67 const CHeading headingEnd = m_endSituation.getHeading();
72 "Need same reference");
74 return { interpolateAngle(headingStart, headingEnd, m_simulationTimeFraction), headingEnd.
getReferenceNorth() };
80 return interpolateAngle(m_startSituation.getPitch(), m_endSituation.getPitch(), m_simulationTimeFraction);
86 return interpolateAngle(m_startSituation.getBank(), m_endSituation.getBank(), m_simulationTimeFraction);
91 return (m_endSituation.getGroundSpeed() - m_startSituation.getGroundSpeed()) * m_simulationTimeFraction +
92 m_startSituation.getGroundSpeed();
static CAngleUnit deg()
Degrees.
static bool isLocalDeveloperDebugBuild()
Local build for developers.
Value object encapsulating information of an aircraft's situation.
Heading as used in aviation, can be true or magnetic heading.
ReferenceNorth getReferenceNorth() const
Get reference north (magnetic or true).
Physical unit angle (radians, degrees).
physical_quantities::CAngle getBank() const
Getter.
aviation::CHeading getHeading() const
Getter.
physical_quantities::CSpeed getGroundSpeed() const
Getter.
CInterpolatorLinearPbh()=default
Constructor.
physical_quantities::CAngle getPitch() const
Getter.
void setTimeFraction(double tf)
Change time fraction.
bool isValidTimeFraction(double timeFraction)
Valid time fraction [0,1].
double clampValidTimeFraction(double timeFraction)
Clamp time fraction [0,1].
T::const_iterator begin(const LockFreeReader< T > &reader)
Non-member begin() and end() for so LockFree containers can be used in ranged for loops.
T::const_iterator end(const LockFreeReader< T > &reader)
Non-member begin() and end() for so LockFree containers can be used in ranged for loops.
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.