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 с ошибкой