Readme.md

    @build commondata Как этим пользоваться

    Как собрать?

    Для сборки проектов необходимо две библиотеки:

    • Eigen - широкоизвестная библиотека для работы с линейной алгеброй;
    • ERFA - открытая реализация алгоритмов представленных в SOFA. Дальше за вас все сделает CMAKE, да, забыл, стандарт С++23.

    Если вы захотите запустить тесты, то нужна еще библиотека catch2

    Как начать разрабатывать свои приложения?

    Общие принципы и минимальный вариант.

    На данный момент наличествует только астродинамическая часть, то далее речь только про нее. Так вот, чтобы все заработало Нужно правильно переводить из TAI в UTC и обратно, а для этого надо задать переменные:

    namespace URSA{
        namespace TimeScale
        {
            int (*GetLeapSecondFromTAI)(const IntegrityAtomicTime & taiMJ);
            int (*GetLeapSecondFromUTC) (const UTTime& utcMJ);
            double (*GetDUt1)(const UTTime& mjd) = nullptr;
        };
    }
    

    Так же зачастую необходимо задать модель вращения Земли, которая таже определяется в глобальной переменной

    namespace URSA{
        class  RefFrameTransform
        {
            static std::unique_ptr<AbstractEarthOrientationModel> _EOP;
        };
    }
    

    Таким образом минимальный пример:

    #include <TimeScale.h>
    #include <AbstractEarthOrientationModel.h>
    #include <Referenceframe.h>
    
    using namespace URSA;
    
    inline int MyGetLeapSecondForTAI(const IntegrityAtomicTime &tai) { return 0; }
    
    inline int MyGetLeapSecondForUTC(const UTTime &utc) { return 0; }
    
    inline double MyGetDUT1(const UTTime& utc) { return 0; }
    
    class MyEarthOrientationModel: public AbstractEarthOrientationModel
    {
    
    };
    
    int main(){
        TimeScale::GetLeapSecondFromTAI = MyGetLeapSecondForTAI;
        TimeScale::GetLeapSecondFromUTC = MyGetLeapSecondForUTC;
        TimeScale::GetDUt1 = MyGetDUT1;
        RefFrameTransform::_EOP = std::unique_ptr<AbstractEarthOrientationModel>( new MyEarthOrientationModel());
    
    
        return 1;
    }
    
    

    Используя UrsaStandardModels

    #include <vector>
    #include <Referenceframe.h>
    #include <IAUStandard92EarthOrientationModel.h>
    #include <StandardTimeScale.h>
    
    int main(){
        std::vector<DUT1> dutData = {{mjdNow, -0.010217}};
        std::vector<LeapSecond> leapDAta = {{0, 37}};
        std::vector<EOPData> eopData = {{mjdNow, -5.58432638586019E-07, -3.62155819788823E-08}};
        RefFrameTransform::_EOP = std::unique_ptr<AbstractEarthOrientationModel>(
            new IAUStandard92EarthOrientationModel(eopData));    
        
        StandardTimeScale::SetLeapSeconds(leapDAta);
        StandardTimeScale::SetDUt1(dutData);
        return 1;
    }    
    
    Описание

    Проект в рамках которого хочется создать открытую библиотеку по моделированию, управления и создания бортового ПО космических аппаратов.

    Конвейеры
    0 успешных
    0 с ошибкой