source: Sophya/trunk/SophyaExt/XAstroPack/xastropack.h@ 1791

Last change on this file since 1791 was 1791, checked in by cmv, 24 years ago

des precisions documentaires cmv 27/11/01

File size: 7.5 KB
RevLine 
[1456]1#ifndef XASTROPACK_H
2#define XASTROPACK_H
3
[1475]4#include "machdefs.h"
[1456]5#include <string.h>
6#include <string>
7
8#ifdef __cplusplus
9extern "C" { /* extern "C" */
10#endif
11#include "XAstro/P_.h"
12#include "XAstro/astro.h"
13#ifdef __cplusplus
14} /* extern "C" */
15#endif
16
[1515]17enum TypAstroCoord {
18 TypCoordUndef = (unsigned long) (0),
19
[1682]20 TypCoordH0 = (unsigned long) (1 << 10), // heure=[0,24[
21 TypCoordH1 = (unsigned long) (1 << 11), // heure=]-12,12]
22 TypCoordD0 = (unsigned long) (1 << 12), // degre=[0,360[
23 TypCoordD1 = (unsigned long) (1 << 13), // degre=]-180,180]
24 TypCoordD2 = (unsigned long) (1 << 14), // degre=[-90,90]
25 TypCoordR0 = (unsigned long) (1 << 15), // degre=[0,2Pi[
26 TypCoordR1 = (unsigned long) (1 << 16), // degre=]-Pi,Pi]
27 TypCoordR2 = (unsigned long) (1 << 17), // degre=[-Pi/2,Pi/2]
28
[1515]29 // Pour indiquer que les coordonnees sont en (heure=[0,24[,degre=[-90,90])
30 TypCoordHD = (unsigned long) (1 << 20),
31 // Pour indiquer que les coordonnees sont en (degre=[0,360[,degre=[-90,90])
32 TypCoordDD = (unsigned long) (1 << 21),
33 // Pour indiquer que les coordonnees sont en (radian=[0,2Pi[,radian=[-Pi/2,Pi/2])
34 TypCoordRR = (unsigned long) (1 << 22),
[1682]35 // Pour indiquer que les coordonnees sont en (heure=]-12,12],degre=[-90,90])
36 TypCoordH1D = (unsigned long) (1 << 23),
37 // Pour indiquer que les coordonnees sont en (degre=]-180,180],degre=[-90,90])
38 TypCoordD1D = (unsigned long) (1 << 24),
39 // Pour indiquer que les coordonnees sont en (radian=]-Pi,Pi],radian=[-Pi/2,Pi/2])
40 TypCoordR1R = (unsigned long) (1 << 25),
[1515]41
42 // Coordonnees Equatoriales alpha,delta
43 TypCoordEq = (unsigned long) (1 << 0),
44 TypCoordEqStd = (unsigned long) ((1 << 0) | (1 << 20)),
45 // Coordonnees Galactiques gLong, gLat
46 TypCoordGal = (unsigned long) (1 << 1),
47 TypCoordGalStd = (unsigned long) ((1 << 1) | (1 << 21)),
48 // Coordonnees Horizontales azimuth,altitude
49 TypCoordHor = (unsigned long) (1 << 2),
50 TypCoordHorStd = (unsigned long) ((1 << 2) | (1 << 21)),
51 // Coordonnees Ecliptiques EclLong,EclLat
52 TypCoordEcl = (unsigned long) (1 << 3),
53 TypCoordEclStd = (unsigned long) ((1 << 3) | (1 << 21))
54};
55
[1679]56// ------------------- Utilitaires -------------------
[1515]57int CoordConvertToStd(TypAstroCoord typ,double& coord1,double& coord2);
[1456]58
[1678]59/*!
60\brief Pour remettre la valeur "val" dans la dynamique [0.,range[.
61 Si "vmax" different de "range", c'est la borne superieure
62 qui peut etre atteinte
63 (si elle est depassee, on soustrait "range").
64\verbatim
65 r>0 vmax>0
66 r=24. vmax=24. -> mets dans [ 0,+24[ borne sup exclue
67 r=24. vmax=12. -> mets dans ]-12,+12] borne inf exclue
[1791]68 (ATTENTION: ca ne marche pas pour la latitude [-90,90]
69 car -90 ne peut etre inclus dans l'intervalle)
[1678]70\endverbatim
71*/
72inline void InRange(double *val,double range)
73 {*val-=range*floor(*val/range);}
74inline void InRange(double *val,double range,double vmax)
75 {InRange(val,range); if(*val>vmax) *val-=range;}
76
[1679]77// ------------------- Gestions des temps -------------------
78/*! \ingroup XAstroPack
79\brief Compute true Julian day from MJD
80*/
81inline double TrueJDfrMJD(double mjd) {return mjd + MJD0;}
82
83/*! \ingroup XAstroPack
84\brief Compute MJD from true Julian day
85*/
86inline double MJDfrTrueJD(double jd) {return jd - MJD0;}
87
[1682]88double MJDfrDate(double dy,int mn,int yr);
89void DatefrMJD(double mjd,double *dy,int *mn,int *yr);
90double YearfrMJD(double mjd);
91double MJDfrYear(double yr);
92void YDfrMJD(double mjd,double *dy,int *yr);
93int IsLeapYear(int y);
94int DayOrder(double mjd,int *dow);
95int DaysInMonth(double mjd);
96double MJDat0hFrMJD(double mjd);
97double HfrMJD(double mjd);
98double GSTfrUTC(double mjd0,double utc);
99double UTCfrGST(double mjd0,double gst);
[1679]100
101/*! \ingroup XAstroPack
102\brief return local sidereal time from greenwich mean siderial time and longitude
103\param precis : if not zero, then correct for obliquity and nutation
104\warning no nutation or obliquity correction are done.
105*/
106inline double LSTfrGST(double gst,double geolng)
107 {double lst = gst + deghr(geolng); InRange(&lst,24.); return lst;}
108
109double GST0(double mjd0);
110double LSTfrMJD(double mjd,double geolng);
111void HMSfrHdec(double hd,int *h,int *mn,double *s);
112double HdecfrHMS(int h,int mn,double s);
113string ToStringHMS(int h,int mn,double s);
114string ToStringHdec(double hd);
115
116// ------------------- Calculs Divers -------------------
117void Precess(double mjd1,double mjd2,double ra1,double dec1,double *ra2,double *dec2);
[1720]118inline void PrecessInPlace(double mjd1,double mjd2,double* ra,double* dec) {
119 double ra1=*ra, dec1=*dec;
120 Precess(mjd1,mjd2,ra1,dec1,ra,dec);
121}
[1682]122double AirmassfrAlt(double alt);
123double HelioCorr(double jd,double ra,double dec);
[1679]124
125// ------------------- Transformation de coordonnees -------------------
126/*! \ingroup XAstroPack
[1720]127\brief Give the hour angle from local sideral time and right ascension
[1679]128\warning right ascencion should be first precessed to date of interest
129\warning no nutation or obliquity correction are done.
130*/
131// Attention au probleme de la discontinuite 0h <==> 24h
132// ts=1 ra=23 ; (ts-ra)=-22 <-12 --> ha = +2 = +24 + (ts-ra)
133// ts=23 ra=1 ; (ts-ra)=+22 >+12 --> ha = -2 = -24 + (ts-ra)
134inline double HafrRaTS(double lst,double ra)
135 {double ha = lst - ra; InRange(&ha,24.,12.); return ha;}
136
137/*! \ingroup XAstroPack
138\brief Give the local sideral time and the hour angle return the right ascencion
139\warning right ascencion is the value precessed to date of interest
140\warning no nutation or obliquity correction are done.
141*/
142inline double RafrHaTS(double lst,double ha)
143 {double ra = lst - ha; InRange(&ra,24.); return ra;}
144
145void EqtoGal(double mjd,double ra,double dec,double *glng,double *glat);
146void GaltoEq(double mjd,double glng,double glat,double *ra,double *dec);
147void EqHtoHor(double geolat,double ha,double dec,double *az,double *alt);
148void HortoEqH(double geolat,double az,double alt,double *ha,double *dec);
149void EqtoHor(double geolat,double lst,double ra,double dec,double *az,double *alt);
150void HortoEq(double geolat,double lst,double az,double alt,double *ra,double *dec);
151void EqtoEcl(double mjd,double ra,double dec,double *eclng,double *eclat);
152void EcltoEq(double mjd,double eclng,double eclat,double *ra,double *dec);
153
154// ------------------- Positions des astres -------------------
155void SunPos(double mjd,double *eclsn,double *ecbsn,double *rsn);
156void MoonPos(double mjd,double *lmn,double *bmn,double *rho);
157void PlanetPos(double mjd,int numplan,double *sunecl,double *sunecb,double *sundist
158 ,double *geodist,double *geoecl,double *geoecb
159 ,double *diamang,double *mag);
160/*! \ingroup XAstroPack
161\brief Same as PlanetPos above with less arguments
162*/
163inline void PlanetPos(double mjd,int numplan,double *geoecl,double *geoecb
164 ,double *geodist,double *diamang)
165{
166 double sunecl,sunecb,sundist,mag;
167 PlanetPos(mjd,numplan,&sunecl,&sunecb,&sundist,geodist,geoecl,geoecb,diamang,&mag);
168}
169
170/*! \ingroup XAstroPack
171\brief Give Jupiter position
172*/
173inline void JupiterPos(double mjd,double *ecl,double *ecb,double *geodist,double *diamang)
174{
175 PlanetPos(mjd,JUPITER,ecl,ecb,geodist,diamang);
176}
177
178/*! \ingroup XAstroPack
179\brief Give Saturn position
180*/
181inline void SaturnPos(double mjd,double *ecl,double *ecb,double *geodist,double *diamang)
182{
183 PlanetPos(mjd,SATURN,ecl,ecb,geodist,diamang);
184}
185
[1456]186#endif
Note: See TracBrowser for help on using the repository browser.