#ifndef XASTROPACK_H #define XASTROPACK_H #include "machdefs.h" #include #include #ifdef __cplusplus extern "C" { /* extern "C" */ #endif #include "XAstro/P_.h" #include "XAstro/astro.h" #ifdef __cplusplus } /* extern "C" */ #endif enum TypAstroCoord { TypCoordUndef = (unsigned long) (0), // Pour indiquer que les coordonnees sont en (heure=[0,24[,degre=[-90,90]) TypCoordHD = (unsigned long) (1 << 20), // Pour indiquer que les coordonnees sont en (degre=[0,360[,degre=[-90,90]) TypCoordDD = (unsigned long) (1 << 21), // Pour indiquer que les coordonnees sont en (radian=[0,2Pi[,radian=[-Pi/2,Pi/2]) TypCoordRR = (unsigned long) (1 << 22), // Coordonnees Equatoriales alpha,delta TypCoordEq = (unsigned long) (1 << 0), TypCoordEqStd = (unsigned long) ((1 << 0) | (1 << 20)), // Coordonnees Galactiques gLong, gLat TypCoordGal = (unsigned long) (1 << 1), TypCoordGalStd = (unsigned long) ((1 << 1) | (1 << 21)), // Coordonnees Horizontales azimuth,altitude TypCoordHor = (unsigned long) (1 << 2), TypCoordHorStd = (unsigned long) ((1 << 2) | (1 << 21)), // Coordonnees Ecliptiques EclLong,EclLat TypCoordEcl = (unsigned long) (1 << 3), TypCoordEclStd = (unsigned long) ((1 << 3) | (1 << 21)) }; double TrueJDfrMJD(double mjd); double MJDfrTrueJD(double jd); double MJDfrDate(double dy,int mn,int yr); void DatefrMJD(double mjd,double *dy,int *mn,int *yr); double YearfrMJD(double mjd); double MJDfrYear(double yr); void YDfrMJD(double mjd,double *dy,int *yr); int IsLeapYear(int y); int DayOrder(double mjd,int *dow); int DaysInMonth(double mjd); double MJDat0hFrMJD(double mjd); double HfrMJD(double mjd); double GSTfrUTC(double mjd0,double utc); double UTCfrGST(double mjd0,double gst); double GST0(double mjd0); double LSTfrGST(double gst,double geolng); double LSTfrMJD(double mjd,double geolng); void Precess(double mjd1,double mjd2,double ra1,double dec1,double *ra2,double *dec2); double AirmassfrAlt(double alt); double HafrRaTS(double lst,double ra); double RafrHaTS(double lst,double ha); double HelioCorr(double jd,double ra,double dec); void HMSfrHdec(double hd,int *h,int *mn,double *s); double HdecfrHMS(int h,int mn,double s); string ToStringHMS(int h,int mn,double s); string ToStringHdec(double hd); void EqtoGal(double mjd,double ra,double dec,double *glng,double *glat); void GaltoEq(double mjd,double glng,double glat,double *ra,double *dec); void EqHtoHor(double geolat,double ha,double dec,double *az,double *alt); void HortoEqH(double geolat,double az,double alt,double *ha,double *dec); void EqtoHor(double geolat,double lst,double ra,double dec,double *az,double *alt); void HortoEq(double geolat,double lst,double az,double alt,double *ra,double *dec); void EqtoEcl(double mjd,double ra,double dec,double *eclng,double *eclat); void EcltoEq(double mjd,double eclng,double eclat,double *ra,double *dec); void SunPos(double mjd,double *lsn,double *bsn); void MoonPos(double mjd,double *lmn,double *bmn); void PlanetPos(double mjd,int numplan,double *ecl,double *ecb,double *diamang); void JupiterPos(double mjd,double *ecl,double *ecb,double *diamang); void SaturnPos(double mjd,double *ecl,double *ecb,double *diamang); int CoordConvertToStd(TypAstroCoord typ,double& coord1,double& coord2); /*! \brief Pour remettre la valeur "val" dans la dynamique [0.,range[. Si "vmax" different de "range", c'est la borne superieure qui peut etre atteinte (si elle est depassee, on soustrait "range"). \verbatim r>0 vmax>0 r=24. vmax=24. -> mets dans [ 0,+24[ borne sup exclue r=24. vmax=12. -> mets dans ]-12,+12] borne inf exclue \endverbatim */ inline void InRange(double *val,double range) {*val-=range*floor(*val/range);} inline void InRange(double *val,double range,double vmax) {InRange(val,range); if(*val>vmax) *val-=range;} #endif