Changeset 2551 in Sophya for trunk/SophyaExt/XephemAstroLib/plans.c
- Timestamp:
- Jun 15, 2004, 6:54:12 PM (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/XephemAstroLib/plans.c
r1719 r2551 5 5 #include <math.h> 6 6 7 #include "P_.h"8 7 #include "astro.h" 9 8 #include "vsop87.h" 10 9 #include "chap95.h" 11 10 12 static void pluto_ell P_((double mjd, double *ret));13 static void chap_trans P_((double mjd, double *ret));14 static void planpos P_((double mjd, int obj, double prec, double *ret));11 static void pluto_ell (double mj, double *ret); 12 static void chap_trans (double mj, double *ret); 13 static void planpos (double mj, int obj, double prec, double *ret); 15 14 16 15 /* coordinate transformation … … 21 20 */ 22 21 static void 23 chap_trans ( mjd, ret)24 double mj d;/* destination epoch */25 double *ret ;/* vector to be transformed _IN PLACE_ */22 chap_trans ( 23 double mj, /* destination epoch */ 24 double *ret) /* vector to be transformed _IN PLACE_ */ 26 25 { 27 26 double ra, dec, r, eps; … … 29 28 30 29 cartsph(ret[0], ret[1], ret[2], &ra, &dec, &r); 31 precess(J2000, mj d, &ra, &dec);32 obliquity(mj d, &eps);30 precess(J2000, mj, &ra, &dec); 31 obliquity(mj, &eps); 33 32 sr = sin(ra); cr = cos(ra); 34 33 sd = sin(dec); cd = cos(dec); … … 43 42 */ 44 43 static void 45 pluto_ell ( mjd, ret)46 double mj d;/* epoch */47 double *ret ;/* ecliptic coordinates {l,b,r} at equinox of date */44 pluto_ell ( 45 double mj, /* epoch */ 46 double *ret) /* ecliptic coordinates {l,b,r} at equinox of date */ 48 47 { 49 48 /* mean orbital elements of Pluto. … … 55 54 Om0 = 110.307, /* long asc node, deg */ 56 55 omeg0 = 113.768, /* arg of perihel, deg */ 57 mj dp = 2448045.539 - MJD0, /* epoch of perihel */58 mj deq = J2000, /* equinox of elements */56 mjp = 2448045.539 - MJD0, /* epoch of perihel */ 57 mjeq = J2000, /* equinox of elements */ 59 58 n = 144.9600/36525.; /* daily motion, deg */ 60 59 … … 63 62 double lo, slo, clo; /* longitude in orbit from asc node */ 64 63 65 reduce_elements(mj deq, mjd, degrad(inc0), degrad(omeg0), degrad(Om0),64 reduce_elements(mjeq, mj, degrad(inc0), degrad(omeg0), degrad(Om0), 66 65 &inc, &omeg, &Om); 67 ma = degrad((mj d - mjdp) * n);66 ma = degrad((mj - mjp) * n); 68 67 anomaly(ma, e, &nu, &ea); 69 68 ret[2] = a * (1.0 - e*cos(ea)); /* r */ … … 81 80 */ 82 81 static void 83 planpos (mjd, obj, prec, ret) 84 double mjd; 85 int obj; 86 double prec; 87 double *ret; 88 { 89 if (mjd >= CHAP_BEGIN && mjd <= CHAP_END) { 82 planpos (double mj, int obj, double prec, double *ret) 83 { 84 if (mj >= CHAP_BEGIN && mj <= CHAP_END) { 90 85 if (obj >= JUPITER) { /* prefer Chapront */ 91 chap95(mj d, obj, prec, ret);92 chap_trans (mj d, ret);86 chap95(mj, obj, prec, ret); 87 chap_trans (mj, ret); 93 88 } else { /* VSOP for inner planets */ 94 vsop87(mj d, obj, prec, ret);89 vsop87(mj, obj, prec, ret); 95 90 } 96 91 } else { /* outside Chapront time: */ 97 92 if (obj != PLUTO) { /* VSOP for all but Pluto */ 98 vsop87(mj d, obj, prec, ret);93 vsop87(mj, obj, prec, ret); 99 94 } else { /* Pluto mean elliptic orbit */ 100 pluto_ell(mj d, ret);95 pluto_ell(mj, ret); 101 96 } 102 97 } … … 126 121 }; 127 122 128 /* given a modified Julian date, mj d, and a planet, p, find:123 /* given a modified Julian date, mj, and a planet, p, find: 129 124 * lpd0: heliocentric longitude, 130 125 * psi0: heliocentric latitude, … … 148 143 */ 149 144 void 150 plans (mjd, p, lpd0, psi0, rp0, rho0, lam, bet, dia, mag) 151 double mjd; 152 int p; 153 double *lpd0, *psi0, *rp0, *rho0, *lam, *bet, *dia, *mag; 154 { 155 static double lastmjd = -10000; 145 plans (double mj, PLCode p, double *lpd0, double *psi0, double *rp0, 146 double *rho0, double *lam, double *bet, double *dia, double *mag) 147 { 148 static double lastmj = -10000; 156 149 static double lsn, bsn, rsn; /* geocentric coords of sun */ 157 150 static double xsn, ysn, zsn; /* cartesian " */ … … 163 156 int pass; 164 157 165 /* get sun cartesian; needed only once at mj d*/166 if (mj d != lastmjd) {167 sunpos (mj d, &lsn, &rsn, &bsn);158 /* get sun cartesian; needed only once at mj */ 159 if (mj != lastmj) { 160 sunpos (mj, &lsn, &rsn, &bsn); 168 161 sphcart (lsn, bsn, rsn, &xsn, &ysn, &zsn); 169 lastmj d = mjd;162 lastmj = mj; 170 163 } 171 164 172 /* first find the true position of the planet at mj d.165 /* first find the true position of the planet at mj. 173 166 * then repeat a second time for a slightly different time based 174 167 * on the position found in the first pass to account for light-travel … … 183 176 * alternative option: vsop allows calculating rates. 184 177 */ 185 planpos(mj d- dt, p, 0.0, ret);178 planpos(mj - dt, p, 0.0, ret); 186 179 187 180 lp = ret[0]; … … 225 218 if (p == SATURN) { 226 219 double et, st, set; 227 satrings (bp, lp, rp, lsn+PI, rsn, mj d+MJD0, &et, &st);220 satrings (bp, lp, rp, lsn+PI, rsn, mj+MJD0, &et, &st); 228 221 set = sin(fabs(et)); 229 222 *mag += (-2.60 + 1.25*set)*set; … … 232 225 233 226 /* For RCS Only -- Do Not Edit */ 234 static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: plans.c,v $ $Date: 200 1-10-22 12:08:27 $ $Revision: 1.2$ $Name: not supported by cvs2svn $"};227 static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: plans.c,v $ $Date: 2004-06-15 16:52:39 $ $Revision: 1.3 $ $Name: not supported by cvs2svn $"};
Note:
See TracChangeset
for help on using the changeset viewer.