#pragma once
///
/// 计算卫星轨道
/// 

//#define EIGEN_USE_MKL_ALL
//#define EIGEN_VECTORIZE_SSE4_2
//#include <mkl.h>
// 本地方法
#include "baseTool.h"

#include <iostream>
#include <Eigen/Core>
#include <Eigen/Dense>
#include <time.h>
//#include <mkl.h>
//#include <armadillo>


using namespace std;
using namespace Eigen;
//using namespace arma;


/// <summary>
/// 多项式轨道模型
/// </summary>
class OrbitPoly {
public:
	//OrbitPoly(std::string orbitModelPath);
	OrbitPoly();
	OrbitPoly(int polynum, Eigen::MatrixX<double> polySatellitePara, double SatelliteModelStartTime);
	~OrbitPoly();

	Eigen::MatrixX<double> SatelliteSpacePoint(Eigen::MatrixX<double> satellitetime); 
	Eigen::MatrixX<double> SatelliteSpacePoint(long double satellitetime);
public:
	int polynum;
	Eigen::MatrixX<double> polySatellitePara;
	double SatelliteModelStartTime;
};



/// <summary>
/// 获取指定时刻的卫星轨道坐标
/// </summary>
/// <param name="satellitetime">卫星时刻</param>
/// <param name="SatelliteModelStartTime">模型起算时间</param>
/// <param name="polySatellitePara">模型参数[x1,y1,z1,vx1,vy1,vz1;  x2,y2,z2,vx2,vy2,vz2; .....  ]</param>
/// <param name="polynum">模型参数数量</param>
/// <returns>卫星坐标</returns>
Eigen::MatrixX<double> SatelliteSpacePoints(Eigen::MatrixX<double> &satellitetime, double SatelliteModelStartTime, Eigen::MatrixX<double>& polySatellitePara, int polynum = 4);
