Ephemeris* PlatformPosition::Interpolate(JSDDateTime date) const { const double JOURCIVIL_LENGTH = 86400.0; Ephemeris* ephem = NULL; if (_nbrData <= 1) { return NULL; } /* * The first element of the list is cloned to ensure that the * output ephemeris is expressed in the same coordinate system as * input ones */ ephem = _data[0]->Clone(); /* NORMAL CASE */ /*------------*/ double dt = 0.0; if (ephem != NULL) { ephem->set_date(date); dt = (date.get_day0hTU().get_julianDate() - _data[0]->get_date().get_day0hTU().get_julianDate()) * JOURCIVIL_LENGTH + date.get_second() - _data[0]->get_date().get_second() + date.get_decimal() - _data[0]->get_date().get_decimal(); /* Computation by Everett */ /*---------------------*/ double pos[3]; double speed[3]; for (int j = 0; j < 3; j++) { _interpolator[j]->Interpolate(dt, pos[j], speed[j]); } ephem->set_position(pos); ephem->set_speed(speed); } return ephem; }
Ephemeris* PlatformPosition::Interpolate(JSDDateTime date) { const double JOURCIVIL_LENGTH = 86400.0 ; Ephemeris* ephem = NULL; if (_nbrData<=1) { std::cout << "a..." << std::endl; ephem = NULL; } else { /* * The first element of the list is cloned to ensure that the output ephemeris is expressed in the same coordinate system as input ones */ ephem = _data[0]->Clone(); /* NORMAL CASE */ /*------------*/ double * x = new double[_nbrData]; double * y = new double[_nbrData]; double * yd = new double[_nbrData]; double dt = 0.0; //double d; x[0] = 0.0 ; for (int i = 1 ; i < _nbrData ; i++) { x[i] = (_data[i]->get_date().get_day0hTU().get_julianDate() - _data[0]->get_date().get_day0hTU().get_julianDate()) * JOURCIVIL_LENGTH + _data[i]->get_date().get_second() - _data[0]->get_date().get_second() + _data[i]->get_date().get_decimal() - _data[0]->get_date().get_decimal(); } if (ephem != NULL) { ephem->set_date(date); dt = (date.get_day0hTU().get_julianDate() - _data[0]->get_date().get_day0hTU().get_julianDate()) * JOURCIVIL_LENGTH + date.get_second() - _data[0]->get_date().get_second() + date.get_decimal() - _data[0]->get_date().get_decimal(); /* Computation by Everett */ /*---------------------*/ double pos[3]; double vit[3]; for (int j = 0 ; j < 3 ; j++) { for (int i = 0 ; i < _nbrData ; i++) { y[i] = _data[i]->get_position()[j] ; yd[i] = _data[i]->get_vitesse()[j] ; } HermiteInterpolator interpolator(_nbrData,x,y,yd); interpolator.Interpolate(dt, pos[j], vit[j]); } ephem->set_position(pos); ephem->set_vitesse(vit); } delete[] x; delete[] y; delete[] yd; } return ephem; }