source: Sophya/trunk/SophyaExt/XephemAstroLib/astro.h@ 3081

Last change on this file since 3081 was 2818, checked in by cmv, 20 years ago

Update de Xephem 3.7 cmv 21/08/2005

File size: 27.1 KB
Line 
1#ifndef _ASTRO_H
2#define _ASTRO_H
3
4#include <stdio.h>
5
6#ifndef PI
7#define PI 3.141592653589793
8#endif
9
10/* conversions among hours (of ra), degrees and radians. */
11#define degrad(x) ((x)*PI/180.)
12#define raddeg(x) ((x)*180./PI)
13#define hrdeg(x) ((x)*15.)
14#define deghr(x) ((x)/15.)
15#define hrrad(x) degrad(hrdeg(x))
16#define radhr(x) deghr(raddeg(x))
17
18/* ratio of from synodic (solar) to sidereal (stellar) rate */
19#define SIDRATE .9972695677
20
21#define SPD (24.0*3600.0) /* seconds per day */
22
23/* manifest names for planets.
24 * N.B. must coincide with usage in pelement.c and plans.c.
25 * N.B. only the first 8 are valid for use with plans().
26 */
27typedef enum {
28 MERCURY,
29 VENUS,
30 MARS,
31 JUPITER,
32 SATURN,
33 URANUS,
34 NEPTUNE,
35 PLUTO,
36 SUN,
37 MOON,
38 NOBJ /* total number of basic objects */
39} PLCode;
40
41/* moon constants for pl_moon */
42typedef enum {
43 X_PLANET = 0, /* use to mean planet itself */
44 PHOBOS = NOBJ, DEIMOS,
45 IO, EUROPA, GANYMEDE, CALLISTO,
46 MIMAS, ENCELADUS, TETHYS, DIONE, RHEA, TITAN, HYPERION, IAPETUS,
47 ARIEL, UMBRIEL, TITANIA, OBERON, MIRANDA,
48 NBUILTIN
49} MCode;
50
51/* starting point for MJD calculations
52 */
53#define MJD0 2415020.0
54#define J2000 (2451545.0 - MJD0) /* yes, 2000 January 1 at 12h */
55
56/* the Now and Obj typedefs.
57 * also, a few miscellaneous constants and declarations.
58 */
59
60#define SPD (24.0*3600.0) /* seconds per day */
61#define MAU (1.4959787e11) /* m / au */
62#define LTAU 499.005 /* seconds light takes to travel 1 AU */
63#define ERAD (6.37816e6) /* earth equitorial radius, m */
64#define MRAD (1.740e6) /* moon equitorial radius, m */
65#define SRAD (6.95e8) /* sun equitorial radius, m */
66#define FTPM 3.28084 /* ft per m */
67#define ESAT_MAG 2 /* default satellite magnitude */
68#define FAST_SAT_RPD 0.25 /* max earth sat rev/day considered "fast" */
69
70#define EOD (-9786) /* special epoch flag: use epoch of date */
71
72/* info about the local observing circumstances and misc preferences */
73typedef struct {
74 double n_mjd; /* modified Julian date, ie, days since
75 * Jan 0.5 1900 (== 12 noon, Dec 30, 1899), utc.
76 * enough precision to get well better than 1 second.
77 * N.B. if not first member, must move NOMJD inits.
78 */
79 double n_lat; /* geographic (surface-normal) lt, >0 north, rads */
80 double n_lng; /* longitude, >0 east, rads */
81 double n_tz; /* time zone, hrs behind UTC */
82 double n_temp; /* atmospheric temp, degrees C */
83 double n_pressure; /* atmospheric pressure, mBar */
84 double n_elev; /* elevation above sea level, earth radii */
85 double n_dip; /* dip of sun below hzn at twilight, >0 below, rads */
86 double n_epoch; /* desired precession display ep as an mjd, or EOD */
87 char n_tznm[8]; /* time zone name; 7 chars or less, always 0 at end */
88} Now;
89
90/* handy shorthands for fields in a Now pointer, np */
91#define mjd np->n_mjd
92#define lat np->n_lat
93#define lng np->n_lng
94#define tz np->n_tz
95#define temp np->n_temp
96#define pressure np->n_pressure
97#define elev np->n_elev
98#define dip np->n_dip
99#define epoch np->n_epoch
100#define tznm np->n_tznm
101#define mjed mm_mjed(np)
102
103/* structures to describe objects of various types.
104 */
105
106/* magnitude values in two different systems */
107typedef struct {
108 float m1, m2; /* either g/k or H/G, depending on... */
109 int whichm; /* one of MAG_gk or MAG_HG */
110} Mag;
111
112/* whichm */
113#define MAG_HG 0 /* using 0 makes HG the initial default */
114#define MAG_gk 1
115
116/* we actually store magnitudes times this scale factor in a short int */
117#define MAGSCALE 100.0
118#define set_smag(op,m) ((op)->s_mag = (short)floor((m)*MAGSCALE + 0.5))
119#define set_fmag(op,m) ((op)->f_mag = (short)floor((m)*MAGSCALE + 0.5))
120#define get_mag(op) ((op)->s_mag / MAGSCALE)
121#define get_fmag(op) ((op)->f_mag / MAGSCALE)
122
123/* longest object name, including trailing '\0' */
124#define MAXNM 21
125
126typedef unsigned char ObjType_t;
127typedef unsigned char ObjAge_t;
128typedef unsigned char byte;
129
130/* Obj is a massive union.
131 * many fields are in common so we use macros to make things a little easier.
132 */
133
134/* fields common to *all* structs in the Obj union */
135#define OBJ_COMMON_FLDS \
136 ObjType_t co_type; /* current object type; see flags, below */ \
137 byte co_flags; /* FUSER*... used by others */ \
138 ObjAge_t co_age; /* update aging code; see db.c */ \
139 char co_name[MAXNM];/* name, including \0 */ \
140 float co_ra; /* geo/topo app/mean ra, rads */ \
141 float co_dec; /* geo/topo app/mean dec, rads */ \
142 float co_gaera; /* geo apparent ra, rads */ \
143 float co_gaedec; /* geo apparent dec, rads */ \
144 float co_az; /* azimuth, >0 e of n, rads */ \
145 float co_alt; /* altitude above topocentric horizon, rads */ \
146 float co_elong; /* angular sep btwen obj and sun, >0 E, degs */ \
147 float co_size; /* angular size, arc secs */ \
148 short co_mag /* visual magnitude * MAGSCALE */
149
150/* fields common to all solar system objects in the Obj union */
151#define OBJ_SOLSYS_FLDS \
152 OBJ_COMMON_FLDS; /* all the fixed ones plus ... */ \
153 float so_sdist; /* dist from object to sun, au */ \
154 float so_edist; /* dist from object to earth, au */ \
155 float so_hlong; /* heliocentric longitude, rads */ \
156 float so_hlat; /* heliocentric latitude, rads */ \
157 float so_phase /* phase, % */
158
159/* fields common to all fixed objects in the Obj union */
160#define OBJ_FIXED_FLDS \
161 char fo_spect[2]; /* spectral codes, if appropriate */ \
162 float fo_epoch; /* eq of ra/dec and time when pm=0; mjd */ \
163 float fo_ra; /* ra, rads, in epoch frame */ \
164 float fo_dec; /* dec, rads, in epoch frame */ \
165 float fo_pmra; /* ra proper motion, rads/day/cos(dec) */ \
166 float fo_pmdec; /* dec proper motion, rads/day */ \
167 char fo_class /* object class */
168
169/* a generic object */
170typedef struct {
171 OBJ_COMMON_FLDS;
172} ObjAny;
173
174/* a generic sol system object */
175typedef struct {
176 OBJ_SOLSYS_FLDS;
177} ObjSS;
178
179/* basic Fixed object info.
180 */
181typedef struct {
182 OBJ_COMMON_FLDS;
183 OBJ_FIXED_FLDS;
184
185 /* following are for galaxies */
186 byte fo_ratio; /* minor/major diameter ratio. use s/get_ratio() */
187 byte fo_pa; /* position angle, E of N, rads. use s/get_pa() */
188} ObjF;
189
190/* true-orbit parameters of binary-star object type */
191typedef struct {
192 float bo_T; /* epoch of periastron, years */
193 float bo_e; /* eccentricity */
194 float bo_o; /* argument of periastron, degress */
195 float bo_O; /* longitude of node, degrees */
196 float bo_i; /* inclination to plane of sky, degrees */
197 float bo_a; /* semi major axis, arc secs */
198 float bo_P; /* period, years */
199
200 /* companion position, computed by obj_cir() iff b_2compute */
201 float bo_pa; /* position angle @ ep, rads E of N */
202 float bo_sep; /* separation @ ep, arc secs */
203 float bo_ra; /* geo/topo app/mean ra, rads */
204 float bo_dec; /* geo/topo app/mean dec, rads */
205} BinOrbit;
206typedef struct {
207 float bp_ep; /* epoch of pa/sep, year */
208 float bp_pa; /* position angle @ ep, rads E of N */
209 float bp_sep; /* separation @ ep, arc secs */
210
211 /* companion position, computed by obj_cir() iff b_2compute */
212 float bp_ra; /* geo/topo app/mean ra, rads */
213 float bp_dec; /* geo/topo app/mean dec, rads */
214} BinPos;
215#define MAXBINPOS 2 /* max discrete epochs to store when no elements */
216typedef struct {
217 OBJ_COMMON_FLDS;
218 OBJ_FIXED_FLDS;
219
220 byte b_2compute; /* whether to compute secondary positions */
221 byte b_nbp; /* number of b_bp[] or 0 to use b_bo */
222 short b_2mag; /* secondary's magnitude * MAGSCALE */
223 char b_2spect[2]; /* secondary's spectrum */
224
225 /* either a real orbit or a set of discrete pa/sep */
226 union {
227 BinOrbit b_bo; /* orbital elements */
228 BinPos b_bp[MAXBINPOS]; /* table of discrete positions */
229 } u;
230} ObjB;
231
232#define fo_mag co_mag /* pseudonym for so_mag since it is not computed */
233#define fo_size co_size /* pseudonym for so_size since it is not computed */
234
235/* macros to pack/unpack some fields */
236#define SRSCALE 255.0 /* galaxy size ratio scale */
237#define PASCALE (255.0/(2*PI)) /* pos angle scale factor */
238#define get_ratio(op) (((int)(op)->f_ratio)/SRSCALE)
239#define set_ratio(op,maj,min) ((op)->f_ratio = (byte)(((maj) > 0) \
240 ? ((min)*SRSCALE/(double)(maj)+0.5) \
241 : 0))
242#define get_pa(op) ((double)(op)->f_pa/PASCALE)
243#define set_pa(op,s) ((op)->f_pa = (byte)((s)*PASCALE + 0.5))
244
245#define NCLASSES 128 /* n potential fo_classes -- allow for all ASCII */
246
247/* basic planet object info */
248typedef struct {
249 OBJ_SOLSYS_FLDS;
250 PLCode plo_code; /* which planet */
251 MCode plo_moon; /* which moon, or X_PLANET if planet */
252 char plo_evis, plo_svis; /* if moon: whether visible from earth, sun */
253 double plo_x, plo_y, plo_z; /* if moon: eq dist from center, planet radii */
254 double plo_aux1, plo_aux2; /* various values, depending on type */
255} ObjPl;
256
257/* basic info about an object in elliptical heliocentric orbit */
258typedef struct {
259 OBJ_SOLSYS_FLDS;
260 float eo_inc; /* inclination, degrees */
261 float eo_Om; /* longitude of ascending node, degrees */
262 float eo_om; /* argument of perihelion, degress */
263 float eo_a; /* mean distance, aka,semi-maj axis,AU */
264 float eo_M; /* mean anomaly, ie, degrees from perihelion at cepoch*/
265 float eo_size; /* angular size, in arc seconds at 1 AU */
266 float eo_startok; /* nominal first mjd this set is ok, else 0 */
267 float eo_endok; /* nominal last mjd this set is ok, else 0 */
268 double eo_e; /* eccentricity (double for when near 1 computing q) */
269 double eo_cepoch; /* epoch date (M reference), as an mjd */
270 double eo_epoch; /* equinox year (inc/Om/om reference), as an mjd. */
271 Mag eo_mag; /* magnitude */
272} ObjE;
273
274/* basic info about an object in hyperbolic heliocentric orbit */
275typedef struct {
276 OBJ_SOLSYS_FLDS;
277 double ho_epoch; /* equinox year (inc/Om/om reference), as an mjd */
278 double ho_ep; /* epoch of perihelion, as an mjd */
279 float ho_startok; /* nominal first mjd this set is ok, else 0 */
280 float ho_endok; /* nominal last mjd this set is ok, else 0 */
281 float ho_inc; /* inclination, degs */
282 float ho_Om; /* longitude of ascending node, degs */
283 float ho_om; /* argument of perihelion, degs. */
284 float ho_e; /* eccentricity */
285 float ho_qp; /* perihelion distance, AU */
286 float ho_g, ho_k; /* magnitude model coefficients */
287 float ho_size; /* angular size, in arc seconds at 1 AU */
288} ObjH;
289
290/* basic info about an object in parabolic heliocentric orbit */
291typedef struct {
292 OBJ_SOLSYS_FLDS;
293 double po_epoch; /* reference epoch, as an mjd */
294 double po_ep; /* epoch of perihelion, as an mjd */
295 float po_startok; /* nominal first mjd this set is ok, else 0 */
296 float po_endok; /* nominal last mjd this set is ok, else 0 */
297 float po_inc; /* inclination, degs */
298 float po_qp; /* perihelion distance, AU */
299 float po_om; /* argument of perihelion, degs. */
300 float po_Om; /* longitude of ascending node, degs */
301 float po_g, po_k; /* magnitude model coefficients */
302 float po_size; /* angular size, in arc seconds at 1 AU */
303} ObjP;
304
305/* basic earth satellite object info */
306typedef struct {
307 OBJ_COMMON_FLDS;
308 double eso_epoch; /* reference epoch, as an mjd */
309 double eso_n; /* mean motion, rev/day
310 * N.B. we need double due to a sensitive differencing
311 * operation used to compute MeanAnomaly in
312 * esat_main()/satellite.c.
313 */
314 float eso_startok; /* nominal first mjd this set is ok, else 0 */
315 float eso_endok; /* nominal last mjd this set is ok, else 0 */
316 float eso_inc; /* inclination, degs */
317 float eso_raan; /* RA of ascending node, degs */
318 float eso_e; /* eccentricity */
319 float eso_ap; /* argument of perigee at epoch, degs */
320 float eso_M; /* mean anomaly, ie, degrees from perigee at epoch */
321 float eso_decay; /* orbit decay rate, rev/day^2 */
322 float eso_drag; /* object drag coefficient, (earth radii)^-1 */
323 int eso_orbit; /* integer orbit number of epoch */
324
325 /* computed "sky" results unique to earth satellites */
326 float ess_elev; /* height of satellite above sea level, m */
327 float ess_range; /* line-of-site distance from observer to satellite, m*/
328 float ess_rangev; /* rate-of-change of range, m/s */
329 float ess_sublat; /* latitude below satellite, >0 north, rads */
330 float ess_sublng; /* longitude below satellite, >0 east, rads */
331 int ess_eclipsed;/* 1 if satellite is in earth's shadow, else 0 */
332} ObjES;
333
334typedef union {
335 ObjAny any; /* these fields valid for all types */
336 ObjSS anyss; /* these fields valid for all solar system types */
337 ObjPl pl; /* planet */
338 ObjF f; /* fixed object, plus proper motion */
339 ObjB b; /* bona fide binary stars (doubles are stored in f) */
340 ObjE e; /* object in heliocentric elliptical orbit */
341 ObjH h; /* object in heliocentric hyperbolic trajectory */
342 ObjP p; /* object in heliocentric parabolic trajectory */
343 ObjES es; /* earth satellite */
344} Obj;
345
346
347/* for o_flags -- everybody must agree */
348#define FUSER0 0x01
349#define FUSER1 0x02
350#define FUSER2 0x04
351#define FUSER3 0x08
352#define FUSER4 0x10
353#define FUSER5 0x20
354#define FUSER6 0x40
355#define FUSER7 0x80
356
357/* mark an object as being a "field star" */
358#define FLDSTAR FUSER3
359/* mark an object as circum calculation failed */
360#define NOCIRCUM FUSER7
361
362/* Obj shorthands: */
363#define o_type any.co_type
364#define o_name any.co_name
365#define o_flags any.co_flags
366#define o_age any.co_age
367#define s_ra any.co_ra
368#define s_dec any.co_dec
369#define s_gaera any.co_gaera
370#define s_gaedec any.co_gaedec
371#define s_az any.co_az
372#define s_alt any.co_alt
373#define s_elong any.co_elong
374#define s_size any.co_size
375#define s_mag any.co_mag
376
377#define s_sdist anyss.so_sdist
378#define s_edist anyss.so_edist
379#define s_hlong anyss.so_hlong
380#define s_hlat anyss.so_hlat
381#define s_phase anyss.so_phase
382
383#define s_elev es.ess_elev
384#define s_range es.ess_range
385#define s_rangev es.ess_rangev
386#define s_sublat es.ess_sublat
387#define s_sublng es.ess_sublng
388#define s_eclipsed es.ess_eclipsed
389
390#define f_class f.fo_class
391#define f_spect f.fo_spect
392#define f_ratio f.fo_ratio
393#define f_pa f.fo_pa
394#define f_epoch f.fo_epoch
395#define f_RA f.fo_ra
396#define f_pmRA f.fo_pmra
397#define f_dec f.fo_dec
398#define f_pmdec f.fo_pmdec
399#define f_mag f.fo_mag
400#define f_size f.fo_size
401
402#define e_cepoch e.eo_cepoch
403#define e_epoch e.eo_epoch
404#define e_startok e.eo_startok
405#define e_endok e.eo_endok
406#define e_inc e.eo_inc
407#define e_Om e.eo_Om
408#define e_om e.eo_om
409#define e_a e.eo_a
410#define e_e e.eo_e
411#define e_M e.eo_M
412#define e_size e.eo_size
413#define e_mag e.eo_mag
414
415#define h_epoch h.ho_epoch
416#define h_startok h.ho_startok
417#define h_endok h.ho_endok
418#define h_ep h.ho_ep
419#define h_inc h.ho_inc
420#define h_Om h.ho_Om
421#define h_om h.ho_om
422#define h_e h.ho_e
423#define h_qp h.ho_qp
424#define h_g h.ho_g
425#define h_k h.ho_k
426#define h_size h.ho_size
427
428#define p_epoch p.po_epoch
429#define p_startok p.po_startok
430#define p_endok p.po_endok
431#define p_ep p.po_ep
432#define p_inc p.po_inc
433#define p_qp p.po_qp
434#define p_om p.po_om
435#define p_Om p.po_Om
436#define p_g p.po_g
437#define p_k p.po_k
438#define p_size p.po_size
439
440#define es_epoch es.eso_epoch
441#define es_startok es.eso_startok
442#define es_endok es.eso_endok
443#define es_inc es.eso_inc
444#define es_raan es.eso_raan
445#define es_e es.eso_e
446#define es_ap es.eso_ap
447#define es_M es.eso_M
448#define es_n es.eso_n
449#define es_decay es.eso_decay
450#define es_drag es.eso_drag
451#define es_orbit es.eso_orbit
452
453#define pl_code pl.plo_code
454#define pl_moon pl.plo_moon
455#define pl_evis pl.plo_evis
456#define pl_svis pl.plo_svis
457#define pl_x pl.plo_x
458#define pl_y pl.plo_y
459#define pl_z pl.plo_z
460#define pl_aux1 pl.plo_aux1
461#define pl_aux2 pl.plo_aux2
462
463#define b_2compute b.b_2compute
464#define b_2spect b.b_2spect
465#define b_2mag b.b_2mag
466#define b_bo b.u.b_bo
467#define b_bp b.u.b_bp
468#define b_nbp b.b_nbp
469
470/* insure we always refer to the fields and no monkey business */
471#undef OBJ_COMMON_FLDS
472#undef OBJ_SOLSYS_FLDS
473
474/* o_type code.
475 * N.B. names are assigned in order in objmenu.c
476 * N.B. if add one add switch in obj_cir().
477 * N.B. UNDEFOBJ must be zero so new objects are undefinied by being zeroed.
478 * N.B. maintain the bitmasks too.
479 */
480enum ObjType {
481 UNDEFOBJ=0,
482 FIXED, BINARYSTAR, ELLIPTICAL, HYPERBOLIC, PARABOLIC, EARTHSAT, PLANET,
483 NOBJTYPES
484};
485
486/* types as handy bitmasks too */
487#define OBJTYPE2MASK(t) (1<<(t))
488#define FIXEDM OBJTYPE2MASK(FIXED)
489#define BINARYSTARM OBJTYPE2MASK(BINARYSTAR)
490#define ELLIPTICALM OBJTYPE2MASK(ELLIPTICAL)
491#define HYPERBOLICM OBJTYPE2MASK(HYPERBOLIC)
492#define PARABOLICM OBJTYPE2MASK(PARABOLIC)
493#define EARTHSATM OBJTYPE2MASK(EARTHSAT)
494#define PLANETM OBJTYPE2MASK(PLANET)
495#define ALLM (~0)
496
497/* rise, set and transit information.
498 */
499typedef struct {
500 int rs_flags; /* info about what has been computed and any
501 * special conditions; see flags, below.
502 */
503 double rs_risetm; /* mjd time of rise today */
504 double rs_riseaz; /* azimuth of rise, rads E of N */
505 double rs_trantm; /* mjd time of transit today */
506 double rs_tranalt; /* altitude of transit, rads up from horizon */
507 double rs_settm; /* mjd time of set today */
508 double rs_setaz; /* azimuth of set, rads E of N */
509} RiseSet;
510
511/* RiseSet flags */
512#define RS_NORISE 0x0001 /* object does not rise as such today */
513#define RS_NOSET 0x0002 /* object does not set as such today */
514#define RS_NOTRANS 0x0004 /* object does not transit as such today */
515#define RS_CIRCUMPOLAR 0x0010 /* object stays up all day today */
516#define RS_NEVERUP 0x0020 /* object never up at all today */
517#define RS_ERROR 0x1000 /* can't figure out anything! */
518#define RS_RISERR (0x0100|RS_ERROR) /* error computing rise */
519#define RS_SETERR (0x0200|RS_ERROR) /* error computing set */
520#define RS_TRANSERR (0x0400|RS_ERROR) /* error computing transit */
521
522#define is_type(op,m) (OBJTYPE2MASK((op)->o_type) & (m))
523
524/* any planet or its moons */
525#define is_planet(op,p) (is_type(op,PLANETM) && op->pl_code == (p))
526
527/* any solar system object */
528#define is_ssobj(op) is_type(op,PLANETM|HYPERBOLICM|PARABOLICM|ELLIPTICALM)
529
530
531
532/* natural satellite support */
533
534typedef struct {
535 char *full; /* full name */
536 char *tag; /* Roman numeral tag */
537 float x, y, z; /* sky loc in planet radii: +x:east +y:south +z:front */
538 float ra, dec; /* sky location in ra/dec */
539 float mag; /* magnitude */
540 int evis; /* whether geometrically visible from earth */
541 int svis; /* whether in sun light */
542 int pshad; /* whether moon is casting shadow on planet */
543 int trans; /* whether moon is transiting */
544 float sx, sy; /* shadow sky loc in planet radii: +x:east +y:south */
545} MoonData;
546
547/* separate set for each planet -- use in pl_moon */
548
549
550enum _marsmoons {
551 M_MARS = 0, /* == X_PLANET */
552 M_PHOBOS, M_DEIMOS,
553 M_NMOONS /* including planet at 0 */
554};
555
556enum _jupmoons {
557 J_JUPITER = 0, /* == X_PLANET */
558 J_IO, J_EUROPA, J_GANYMEDE, J_CALLISTO,
559 J_NMOONS /* including planet */
560};
561
562enum _satmoons {
563 S_SATURN = 0, /* == X_PLANET */
564 S_MIMAS, S_ENCELADUS, S_TETHYS, S_DIONE,
565 S_RHEA, S_TITAN, S_HYPERION, S_IAPETUS,
566 S_NMOONS /* including planet */
567};
568
569enum _uramoons {
570 U_URANUS = 0, /* == X_PLANET */
571 U_ARIEL, U_UMBRIEL, U_TITANIA, U_OBERON, U_MIRANDA,
572 U_NMOONS /* including planet */
573};
574
575#define X_MAXNMOONS S_NMOONS /* N.B. chosen by hand */
576
577
578
579/* global function declarations */
580
581
582/* aa_hadec.c */
583extern void aa_hadec (double lt, double alt, double az, double *ha,
584 double *dec);
585extern void hadec_aa (double lt, double ha, double dec, double *alt,
586 double *az);
587
588/* aberration.c */
589extern void ab_ecl (double m, double lsn, double *lam, double *bet);
590extern void ab_eq (double m, double lsn, double *ra, double *dec);
591
592/* airmass.c */
593extern void airmass (double aa, double *Xp);
594
595/* anomaly.c */
596extern void anomaly (double ma, double s, double *nu, double *ea);
597
598/* ap_as.c */
599extern void ap_as ( Now *np, double Mjd, double *rap, double *decp);
600extern void as_ap ( Now *np, double Mjd, double *rap, double *decp);
601
602/* atlas.c */
603extern char *um_atlas (double ra, double dec);
604extern char *u2k_atlas (double ra, double dec);
605extern char *msa_atlas (double ra, double dec);
606
607/* aux.c */
608extern double mm_mjed (Now *np);
609
610/* chap95.c */
611extern int chap95 (double m, int obj, double prec, double *ret);
612
613/* chap95_data.c */
614
615/* circum.c */
616extern int obj_cir (Now *np, Obj *op);
617
618/* comet.c */
619extern void comet (double m, double ep, double inc, double ap, double qp,
620 double om, double *lpd, double *psi, double *rp, double *rho, double *lam,
621 double *bet);
622
623/* constel.c */
624#define NCNS 89
625extern int cns_pick (double r, double d, double e);
626extern int cns_id (char *abbrev);
627extern char *cns_name (int id);
628extern int cns_edges (double e, double **ra0p, double **dec0p, double **ra1p,
629 double **dec1p);
630extern int cns_list (double ra, double dec, double e, double rad, int ids[]);
631extern int cns_figure (int id, double e, double ra[],double dec[],int dcodes[]);
632extern int cns_loadfigs (FILE *fp, char msg[]);
633
634/* dbfmt.c */
635extern int db_crack_line (char s[], Obj *op, char nm[][MAXNM], int nnm,
636 char whynot[]);
637extern void db_write_line (Obj *op, char *lp);
638extern int dbline_candidate (char line[]);
639extern int get_fields (char *s, int delim, char *fields[]);
640extern int db_tle (char *name, char *l1, char *l2, Obj *op);
641extern int dateRangeOK (Now *np, Obj *op);
642
643/* deltat.c */
644extern double deltat (double m);
645
646/* earthsat.c */
647extern int obj_earthsat (Now *np, Obj *op);
648
649/* eq_ecl.c */
650extern void eq_ecl (double m, double ra, double dec, double *lt,double *lg);
651extern void ecl_eq (double m, double lt, double lg, double *ra,double *dec);
652
653/* eq_gal.c */
654extern void eq_gal (double m, double ra, double dec, double *lt,double *lg);
655extern void gal_eq (double m, double lt, double lg, double *ra,double *dec);
656
657/* formats.c */
658extern int fs_sexa (char *out, double a, int w, int fracbase);
659extern int fs_date (char out[], double jd);
660extern int f_scansexa (const char *str, double *dp);
661extern void f_sscandate (char *bp, int pref, int *m, double *d, int *y);
662
663/* helio.c */
664extern void heliocorr (double jd, double ra, double dec, double *hcp);
665
666/* jupmoon.c */
667extern void jupiter_data (double Mjd, char dir[], Obj *sop, Obj *jop,
668 double *jupsize, double *cmlI, double *cmlII, double *polera,
669 double *poledec, MoonData md[J_NMOONS]);
670
671/* libration.c */
672extern void llibration (double JD, double *llatp, double *llonp);
673
674/* magdecl.c */
675extern int magdecl (double l, double L, double e, double y, char *dir,
676 double *dp, char *err);
677
678/* marsmoon.c */
679extern void marsm_data (double Mjd, char dir[], Obj *sop, Obj *mop,
680 double *marssize, double *polera, double *poledec, MoonData md[M_NMOONS]);
681
682/* misc.c */
683extern void zero_mem (void *loc, unsigned len);
684extern int tickmarks (double min, double max, int numdiv, double ticks[]);
685extern int lc (int cx, int cy, int cw, int x1, int y1, int x2, int y2,
686 int *sx1, int *sy1, int *sx2, int *sy2);
687extern void hg_mag (double h, double g, double rp, double rho, double rsn,
688 double *mp);
689extern int magdiam (int fmag, int magstp, double scale, double mag,
690 double size);
691extern void gk_mag (double g, double k, double rp, double rho, double *mp);
692extern double atod (char *buf);
693extern void solve_sphere (double A, double b, double cc, double sc,
694 double *cap, double *Bp);
695extern double delra (double dra);
696extern void now_lst (Now *np, double *lstp);
697extern void radec2ha (Now *np, double ra, double dec, double *hap);
698extern void gha (Now *np, Obj *op, double *ghap);
699extern char *obj_description (Obj *op);
700extern int is_deepsky (Obj *op);
701
702/* mjd.c */
703extern void cal_mjd (int mn, double dy, int yr, double *m);
704extern void mjd_cal (double m, int *mn, double *dy, int *yr);
705extern int mjd_dow (double m, int *dow);
706extern int isleapyear (int year);
707extern void mjd_dpm (double m, int *ndays);
708extern void mjd_year (double m, double *yr);
709extern void year_mjd (double y, double *m);
710extern void rnd_second (double *t);
711extern void mjd_dayno (double jd, int *yr, double *dy);
712extern double mjd_day (double jd);
713extern double mjd_hr (double jd);
714extern void range (double *v, double r);
715extern void radecrange (double *ra, double *dec);
716
717/* moon.c */
718extern void moon (double m, double *lam, double *bet, double *rho,
719 double *msp, double *mdp);
720
721/* mooncolong.c */
722extern void moon_colong (double jd, double lt, double lg, double *cp,
723 double *kp, double *ap, double *sp);
724
725/* moonnf.c */
726extern void moonnf (double mj, double *mjn, double *mjf);
727
728/* nutation.c */
729extern void nutation (double m, double *deps, double *dpsi);
730extern void nut_eq (double m, double *ra, double *dec);
731
732/* obliq.c */
733extern void obliquity (double m, double *eps);
734
735/* parallax.c */
736extern void ta_par (double tha, double tdec, double phi, double ht,
737 double *rho, double *aha, double *adec);
738
739/* parallactic.c */
740extern double parallacticLDA (double lt, double dec, double alt);
741extern double parallacticLHD (double lt, double ha, double dec);
742
743/* plans.c */
744extern void plans (double m, PLCode p, double *lpd0, double *psi0,
745 double *rp0, double *rho0, double *lam, double *bet, double *dia,
746 double *mag);
747
748/* plshadow.c */
749extern int plshadow (Obj *op, Obj *sop, double polera,
750 double poledec, double x, double y, double z, float *sxp, float *syp);
751
752/* plmoon_cir.c */
753extern int plmoon_cir (Now *np, Obj *moonop);
754extern int getBuiltInObjs (Obj **opp);
755extern void setMoonDir (char *dir);
756
757/* precess.c */
758extern void precess (double mjd1, double mjd2, double *ra, double *dec);
759
760/* reduce.c */
761extern void reduce_elements (double mjd0, double m, double inc0,
762 double ap0, double om0, double *inc, double *ap, double *om);
763
764/* refract.c */
765extern void unrefract (double pr, double tr, double aa, double *ta);
766extern void refract (double pr, double tr, double ta, double *aa);
767
768/* rings.c */
769extern void satrings (double sb, double sl, double sr, double el, double er,
770 double JD, double *etiltp, double *stiltp);
771
772/* riset.c */
773extern void riset (double ra, double dec, double lt, double dis,
774 double *lstr, double *lsts, double *azr, double *azs, int *status);
775
776/* riset_cir.c */
777extern void riset_cir (Now *np, Obj *op, double dis, RiseSet *rp);
778extern void twilight_cir (Now *np, double dis, double *dawn, double *dusk,
779 int *status);
780
781/* satmoon.c */
782extern void saturn_data (double Mjd, char dir[], Obj *eop, Obj *sop,
783 double *satsize, double *etilt, double *stlit, double *polera,
784 double *poledec, MoonData md[S_NMOONS]);
785
786/* sphcart.c */
787extern void sphcart (double l, double b, double r, double *x, double *y,
788 double *z);
789extern void cartsph (double x, double y, double z, double *l, double *b,
790 double *r);
791
792/* sun.c */
793extern void sunpos (double m, double *lsn, double *rsn, double *bsn);
794
795/* twobody.c */
796extern int vrc (double *v, double *r, double tp, double e, double q);
797
798/* umoon.c */
799extern void uranus_data (double Mjd, char dir[], Obj *sop, Obj *uop,
800 double *usize, double *polera, double *poledec, MoonData md[U_NMOONS]);
801
802/* utc_gst.c */
803extern void utc_gst (double m, double utc, double *gst);
804extern void gst_utc (double m, double gst, double *utc);
805
806/* vsop87.c */
807extern int vsop87 (double m, int obj, double prec, double *ret);
808
809#endif /* _ASTRO_H */
810
811/* For RCS Only -- Do Not Edit
812 * @(#) $RCSfile: astro.h,v $ $Date: 2005-08-21 10:02:36 $ $Revision: 1.5 $ $Name: not supported by cvs2svn $
813 */
Note: See TracBrowser for help on using the repository browser.