refactor: Add interface for PBH interpolators

This commit is contained in:
Lars Toenning
2024-01-09 22:42:09 +01:00
parent 3bc2d4062c
commit be2c756c8c
6 changed files with 47 additions and 10 deletions

View File

@@ -648,6 +648,7 @@ add_library(misc SHARED
simulation/simulatedaircraftlist.cpp
simulation/matchingstatisticsentry.h
simulation/interpolationsetuplist.h
simulation/interpolatorpbh.h
# Test
test/testdata.cpp

View File

@@ -246,11 +246,12 @@ namespace BlackMisc::Simulation
{
if (!isValidInterpolant) { break; }
const IInterpolatorPbh &pbh = interpolant.pbh();
// init interpolated situation
currentSituation = this->initInterpolatedSituation(pbh.getStartSituation(), pbh.getEndSituation());
// Pitch bank heading first, so follow up steps could use those values
const auto pbh = interpolant.pbh();
currentSituation.setHeading(pbh.getHeading());
currentSituation.setPitch(pbh.getPitch());
currentSituation.setBank(pbh.getBank());

View File

@@ -60,7 +60,7 @@ namespace BlackMisc
//! End situation
const Aviation::CAircraftSituation &getEndSituation() const { return m_endSituation; }
CInterpolatorLinearPbh pbh() const { return m_pbh; }
const IInterpolatorPbh &pbh() const { return m_pbh; }
private:
Aviation::CAircraftSituation m_startSituation;

View File

@@ -11,11 +11,12 @@
#include "blackmisc/pq/angle.h"
#include "blackmisc/pq/speed.h"
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/simulation/interpolatorpbh.h"
namespace BlackMisc::Simulation
{
//! Simple linear interpolator for pitch, bank, heading and groundspeed from start to end situation
class BLACKMISC_EXPORT CInterpolatorLinearPbh
class BLACKMISC_EXPORT CInterpolatorLinearPbh : public IInterpolatorPbh
{
public:
//! @{
@@ -27,12 +28,12 @@ namespace BlackMisc::Simulation
//! @{
//! Getter
Aviation::CHeading getHeading() const;
PhysicalQuantities::CAngle getPitch() const;
PhysicalQuantities::CAngle getBank() const;
PhysicalQuantities::CSpeed getGroundSpeed() const;
const Aviation::CAircraftSituation &getStartSituation() const { return m_startSituation; }
const Aviation::CAircraftSituation &getEndSituation() const { return m_endSituation; }
Aviation::CHeading getHeading() const override;
PhysicalQuantities::CAngle getPitch() const override;
PhysicalQuantities::CAngle getBank() const override;
PhysicalQuantities::CSpeed getGroundSpeed() const override;
const Aviation::CAircraftSituation &getStartSituation() const override { return m_startSituation; }
const Aviation::CAircraftSituation &getEndSituation() const override { return m_endSituation; }
//! @}
//! Change time fraction

View File

@@ -0,0 +1,34 @@
// SPDX-FileCopyrightText: Copyright (C) swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
//! \file
#ifndef BLACKMISC_SIMULATION_INTERPOLATORPBH_H
#define BLACKMISC_SIMULATION_INTERPOLATORPBH_H
#include "blackmisc/aviation/heading.h"
#include "blackmisc/pq/angle.h"
#include "blackmisc/pq/speed.h"
#include "blackmisc/aviation/aircraftsituation.h"
namespace BlackMisc::Simulation
{
//! Base class for Pitch-Bank-Heading interpolators
class IInterpolatorPbh
{
public:
virtual ~IInterpolatorPbh() = default;
//! @{
//! Getter
virtual Aviation::CHeading getHeading() const = 0;
virtual PhysicalQuantities::CAngle getPitch() const = 0;
virtual PhysicalQuantities::CAngle getBank() const = 0;
virtual PhysicalQuantities::CSpeed getGroundSpeed() const = 0;
virtual const Aviation::CAircraftSituation &getStartSituation() const = 0;
virtual const Aviation::CAircraftSituation &getEndSituation() const = 0;
//! @}
};
}
#endif // BLACKMISC_SIMULATION_INTERPOLATORPBH_H

View File

@@ -77,7 +77,7 @@ namespace BlackMisc::Simulation
//! \private UNIT tests/ASSERT only
const PosArray &getPa() const { return m_pa; }
CInterpolatorLinearPbh pbh() const { return m_pbh; }
const IInterpolatorPbh &pbh() const { return m_pbh; }
private:
PosArray m_pa; //!< current positions array, latest values last