30 {
return fmod(f,1.0); }
34 double ddd (
int d,
int m,
double s)
49 if ( (d < 0) || (m < 0) || (s < 0)) dd = -1.0;
51 dd = dd * (fabs(
double(d)) + fabs(
double(m))/60.0 + fabs(s)/3600.0);
58 void dms (
double dd,
int &d,
int &m,
double &s)
93 double mjd (
int day,
int month,
int year,
double hour)
104 a = 10000.0 * year + 100.0 * month + day;
112 b = ((year+4716)/4) - 1181;
122 else b = (year/400) - (year/100) + (year/4);
126 a = 365.0 * year - 679004.0;
127 a = a + b + int(30.6001 * (month + 1)) + day + hour / 24.0;
139 return (mjuld - 51544.5) / 36525.0;
144 void caldat (
double mjd,
int &day,
int &month,
int &year,
double &hour)
156 long int b, c, d, e, f, jd0;
158 jd0 = long(mjd + 2400001.0);
159 if (jd0 < 2299161) c = jd0 + 1524;
162 b = long (( jd0 - 1867216.25) / 36524.25);
163 c = jd0 + b - (b/4) + 1525;
166 if (mjd < -2400001.0)
168 if (mjd == floor(mjd)) jd0 = jd0 + 1;
169 c = long((-jd0 - 0.1)/ 365.25);
175 if ((c % 4) == 0) e = 61;
202 month = long((f + 123.0) / 30.6001);
203 day = f - long(month * 30.6001) + 123;
210 d = long ((c - 122.1) / 365.25);
212 f = long ((c - e) / 30.6001);
213 day = c - e - long(30.6001 * f);
214 month = f - 1 - 12 * (f / 14);
215 year = d - 4715 - ((7 + month) / 10);
218 hour = 24.0 * (mjd - floor(mjd));
228 const int td[9] = {55,55,56,56,57,58,58,59,60};
238 if (yr > 2006) yr -= 1;
239 if (yr > 2006) yr -= 1;
240 if (yr > 2007) yr -= 1;
241 if (yr > 2007) yr -= 1;
243 if (yr < 1999) yr = 1999;
247 result = (((-339.84*t - 516.12)*t -160.22)*t + 92.23)*t + 71.28;
252 result = (27.5*t + 75.0)*t + 73.0;
272 result = 5.156 + 13.3066 * t * t;
273 if (yr > 1864) result = -0.6*(yr - 1865) + 6;
274 if (yr > 1884) result = -0.2*(yr - 1885) - 6;
278 if (yr > 947) result = 25.5 * t*t;
279 else result = 1360 + (44.3*t + 320.0) * t;
291 else result = floor(result + 0.5);
300 double lsidtim (
double jd,
double lambda,
double ep2)
311 ut = (jd - mjd0)*24.0;
312 t = (mjd0 - 51544.5) / 36525.0;
313 gmst = 6.697374558 + 1.0027379093*ut
314 + (8640184.812866 + (0.093104 - 6.2e-6*t)*t)*t/3600.0;
315 lmst = 24.0 *
frac((gmst + lambda/15.0) / 24.0);
316 lmst = lmst + ep2 / 3600.0;
331 tp = 23.43929111 - (46.815+(0.00059-0.001813*t)*t)*t/3600.0;
332 tp = 1.74532925199e-2 * tp;
380 const double secrad = 4.8481368111e-6;
382 double ppi, pii, pa, dt;
386 ppi = 174.876383889 + (((3289.4789+0.60622*t1)*t1) +
387 ((-869.8089-0.50491*t1) + 0.03536*dt)*dt) / 3600.0;
388 ppi = ppi * 1.74532925199e-2;
389 pii = ((47.0029-(0.06603-0.000598*t1)*t1) +
390 ((-0.03302+0.000598*t1)+0.00006*dt)*dt)*dt * secrad;
391 pa = ((5029.0966+(2.22226-0.000042*t1)*t1) +
392 ((1.11113-0.000042*t1)-0.000006*dt)*dt)*dt * secrad;
412 const double secrad = 4.8481368111e-6;
414 double dt, zeta, z, theta;
418 zeta = ((2306.2181+(1.39656-0.000139*t1)*t1) +
419 ((0.30188-0.000345*t1)+0.017998*dt)*dt)*dt * secrad;
420 z = zeta + ((0.7928+0.000411*t1)+0.000205*dt)*dt*dt * secrad;
421 theta = ((2004.3109-(0.8533+0.000217*t1)*t1) -
422 ((0.42665+0.000217*t1)+0.041833*dt)*dt)*dt * secrad;
446 const int tb1[ntb1][5] =
466 const int tb2[ntb2][5] =
505 const double tb3[ntb1][4] =
507 {-171996.0,-174.2, 92025.0, 8.9 },
508 { 2062.0, 0.2, -895.0, 0.5 },
509 { -13187.0, -1.6, 5736.0, -3.1 },
510 { 1426.0, -3.4, 54.0, -0.1 },
511 { -517.0, 1.2, 224.0, -0.6 },
512 { 217.0, -0.5, -95.0, 0.3 },
513 { 129.0, 0.1, -70.0, 0.0 },
514 { 17.0, -0.1, 0.0, 0.0 },
515 { -16.0, 0.1, 7.0, 0.0 },
516 { -2274.0, -0.2, 977.0, -0.5 },
517 { 712.0, 0.1, -7.0, 0.0 },
518 { -386.0, -0.4, 200.0, 0.0 },
519 { -301.0, 0.0, 129.0, -0.1 },
520 { 63.0, 0.1, -33.0, 0.0 },
521 { -58.0, -0.1, 32.0, 0.0 },
524 const double tb4[ntb2][2] =
563 const double secrad = 4.8481368111e-6;
564 const double p2 = 2.0 *
M_PI;
566 double ls, lm, d, f, n, dpsi, deps, ep0;
572 lm = 2.355548393544 +
573 (8328.691422883903 + (0.000151795164 + 0.000000310281*t)*t)*t;
574 ls = 6.240035939326 +
575 (628.301956024185 + (-0.000002797375 - 0.000000058178*t)*t)*t;
577 (8433.466158318464 + (-0.000064271750 + 0.000000053330*t)*t)*t;
579 (7771.377146170650 + (-0.000033408511 + 0.000000092115*t)*t)*t;
581 (-33.757045933754 + (0.000036142860 + 0.000000038785*t)*t)*t;
591 for(j=0; j<ntb1; ++j)
593 ep0 = tb1[j][0]*lm + tb1[j][1]*ls + tb1[j][2]*f + tb1[j][3]*d + tb1[j][4]*n;
594 dpsi = dpsi + (tb3[j][0]+tb3[j][1]*t) * sin(ep0);
595 deps = deps + (tb3[j][2]+tb3[j][3]*t) * cos(ep0);
597 for(j=0; j<ntb2; ++j)
599 ep0 = tb2[j][0]*lm + tb2[j][1]*ls + tb2[j][2]*f + tb2[j][3]*d + tb2[j][4]*n;
600 dpsi = dpsi + tb4[j][0] * sin(ep0);
601 deps = deps + tb4[j][1] * cos(ep0);
603 dpsi = 1.0e-4 * dpsi * secrad;
604 deps = 1.0e-4 * deps * secrad;
609 ls = p2 *
frac (0.993133+99.997306*t);
610 d = p2 *
frac (0.827362+1236.853087*t);
611 f = p2 *
frac (0.259089+1342.227826*t);
612 n = p2 *
frac (0.347346 - 5.372447*t);
614 dpsi = (-17.2*sin(n) - 1.319*sin(2*(f-d+n)) - 0.227*sin(2*(f+n))
615 + 0.206*sin(2*n) + 0.143*sin(ls)) * secrad;
616 deps = (+9.203*cos(n) + 0.574*cos(2*(f-d+n)) + 0.098*cos(2*(f+n))
617 -0.09*cos(2*n) ) * secrad;
627 ep2 = dpsi * cos (ep2);
628 ep2 *= 13750.9870831;
643 const double secrad = 4.8481368111e-6;
644 const double p2 = 2.0 *
M_PI;
646 double ls, d, f, n, dpsi, deps, ep0;
649 ls = p2 *
frac (0.993133+99.997306*t);
650 d = p2 *
frac (0.827362+1236.853087*t);
651 f = p2 *
frac (0.259089+1342.227826*t);
652 n = p2 *
frac (0.347346 - 5.372447*t);
654 dpsi = (-17.2*sin(n) - 1.319*sin(2*(f-d+n)) - 0.227*sin(2*(f+n))
655 + 0.206*sin(2*n) + 0.143*sin(ls)) * secrad;
657 deps = (+9.203*cos(n) + 0.574*cos(2*(f-d+n)) + 0.098*cos(2*(f+n))
658 -0.09*cos(2*n) ) * secrad;
665 ep2 = dpsi * cos (ep2);
666 ep2 *= 13750.9870831;
680 const double arctrd =
M_PI / (180.0*3600.0);
686 res.
assign(1.0,0.0,xr,0.0,1.0,-yr,-xr,yr,1.0);
699 const double p2 = 2.0 *
M_PI;
705 l = p2 *
frac(0.27908+100.00214*t);
707 va[0] = ve[0] - 9.934e-5 * sin(l) * d0;
708 va[1] = ve[1] + 9.125e-5 * cl;
709 va[2] = ve[2] + 3.927e-5 * cl;
716 Vec3 GeoPos (
double jd,
double ep2,
double lat,
double lng,
double ht)
726 double const e2 = 6.69438499959e-3;
733 np = 1.0 / (sqrt(1.0 - e2*sp*sp));
734 r[2] = ((1.0 - e2)*np + h)*sp;
736 sp = (np + h) * cos(lat);
745 Vec3 GeoPos (
double jd,
double ep2,
double lat,
double lng,
double ht,
746 double xp,
double yp)
758 double const e2 = 6.69438499959e-3;
765 np = 1.0 / (sqrt(1.0 - e2*sp*sp));
766 r[2] = ((1.0 - e2)*np + h)*sp;
767 sp = (np + h) * cos(lat);
768 r[0] = sp * cos(lng);
769 r[1] = sp * sin(lng);
772 if ((xp != 0) || (yp != 0))
833 void AppPos (
double jd,
double ep2,
double lat,
double lng,
double ht,
834 int solsys,
Vec3 r,
double& azim,
double& elev,
double& dist)
853 if (solsys) s = r -
GeoPos(jd, ep2, lat, lng, ht);
856 s =
EquHor(jd, ep2, lat, lng, s);
865 void AppRADec (
double jd,
double ep2,
double lat,
double lng,
866 double azim,
double elev,
double& ra,
double& dec)
883 s =
HorEqu(jd, ep2, lat, lng, s);
900 double const raddeg = 180.0 /
M_PI;
904 r = (r + 7.31 / (r + 4.4)) / raddeg;
905 r = (0.28*p/(t+273.0)) * 0.0167 / tan(r);
920 const double p2 = 2.0*
M_PI;
921 const double eps = 1E-11;
922 const int maxit = 15;
933 f = e - ecc*sin(e) - m;
936 while ((fabs(f) > eps) && (i < maxit))
938 e = e - f / (1.0 - ecc*cos(e));
939 f = e - ecc*sin(e) - m;
956 const double eps = 1E-11;
957 const int maxit = 15;
962 h = log (2.0*fabs(mh)/ecc+1.8);
963 if (mh < 0.0) h = -h;
964 f = ecc * sinh(h) - h - mh;
967 while ((fabs(f) > eps*(1.0+fabs(h+mh))) && (i < maxit))
969 h = h - f / (ecc*cosh(h) - 1.0);
970 f = ecc*sinh(h) - h - mh;
980 void ellip (
double gm,
double t0,
double t,
double a,
double ecc,
992 double m, e, fac, k, c, s;
994 if (fabs(a) < 1e-60) a = 1e-60;
996 if (k >= 0) k = sqrt(k);
999 m = k * (t - t0) / a + m0;
1001 fac = sqrt(1.0 - ecc*ecc);
1004 r1.
assign (a*(c - ecc), a*fac*s, 0.0);
1006 v1.
assign (-k*s/m, k*fac*c/m, 0.0);
1011 void hyperb (
double gm,
double t0,
double t,
double a,
double ecc,
1022 double mh, h, fac, k, c, s;
1025 if (a < 1e-60) a = 1e-60;
1027 if (k >= 0) k = sqrt(k);
1030 mh = k * (t - t0) / a;
1032 fac = sqrt(ecc*ecc-1.0);
1035 r1.
assign (a*(ecc-c), a*fac*s, 0.0);
1037 v1.
assign (-k*s/mh, k*fac*c/mh, 0.0);
1042 void stumpff (
double e2,
double& c1,
double& c2,
double& c3)
1049 const double eps=1E-12;
1052 c1=0.0; c2=0.0; c3=0.0; add=1.0; n=1.0;
1055 c1=c1+add; add=add/(2.0*n);
1056 c2=c2+add; add=add/(2.0*n+1);
1057 c3=c3+add; add=-e2*add;
1062 void parab (
double gm,
double t0,
double t,
double q,
double ecc,
1074 const double eps = 1E-9;
1075 const int maxit = 15;
1077 double e2, e20, fac, c1, c2, c3, k, tau, a, u, u2;
1082 e2=0.0; fac=0.5*ecc; i=0;
1085 if (q < 1e-40) q = 1e-40;
1086 k = gm / (q*(1+ecc));
1088 if (k >= 0) k = sqrt(k);
1092 if (tau >= 0) tau= 1.5*sqrt(tau)*(t-t0);
1099 if (fac < 0.0) a = -1.0;
1100 else a = tau * sqrt(fac);
1101 a = sqrt(a*a+1.0)+a;
1102 if (a > 0.0) a = exp(log(a)/3.0);
1103 if (a == 0.0) u = 0.0;
1106 if (fac != 0) e2 = u2*(1.0-ecc)/fac;
1110 fle = (
abs(e2-e20) <
eps) || (i > maxit);
1115 tau = q*(1.0+u2*c2*ecc/fac);
1116 x = q*(1.0-u2*c2/fac);
1118 if (y >= 0) y = q*sqrt(y)*u*c1;
1121 v1.
assign (-k*y/tau, k*(x/tau+ecc), 0.0);
1132 void kepler (
double gm,
double t0,
double t,
double m0,
double a,
double ecc,
1133 double ran,
double aper,
double inc,
Vec3& r1,
Vec3& v1)
1173 const double dgrd =
M_PI / 180.0;
1174 enum {ell, par, hyp} kepc;
1186 if (ecc == 1.0) kepc = par;
1189 if (m0 < 0.0) kepc = par;
1194 if (m0 < 0.0) kepc = par;
1200 case ell :
ellip (gm, t0, t, a, ecc, m0, r1, v1);
break;
1201 case par :
parab (gm, t0, t, a, ecc, r1, v1);
break;
1202 case hyp :
hyperb (gm, t0, t, a, ecc, r1, v1);
break;
1212 r1 =
mxvct (m2, r1);
1213 v1 =
mxvct (m2, v1);
1219 double& t0,
double& m0,
double& a,
double& ecc,
1220 double& ran,
double& aper,
double& inc)
1244 const double rddg = 180.0/
M_PI;
1245 const double p2 = 2.0*
M_PI;
1248 double cabs, u, cu, su, p, r;
1258 if (gm < 1e-60) gm = 1e-60;
1261 if (fabs(cabs) < 1e-40) cabs = 1e-40;
1262 ran =
atan20 (c[0], -c[1]);
1264 if (fabs(inc) <= 1.0) inc = acos (inc);
1268 if (fabs(r) < 1e-40) r = 1e-40;
1270 if (su != 0.0) su = r1[2]/su;
1271 cu = r1[0]*cos(ran)+r1[1]*sin(ran);
1276 if (fabs(a) < 1.0E-30) ecc = 1.0;
1293 if (ecc >= 0) ecc = sqrt(ecc);
1295 p = p / (1.0 + ecc);
1298 if (fabs(a) > 1e-60) cu = (1.0 - r/a);
1300 su =
dot(r1,v1) / sqrt(fabs(a)*gm);
1307 if (aper >= 0) aper =
atan20(sqrt(aper)*su,(cu-ecc));
1313 m0 = su + sqrt(su*su + 1.0);
1314 if (m0 >= 0) m0 = log(m0);
1315 aper = (ecc+1.0)/(ecc-1.0);
1316 if (aper >= 0) aper = 2.0 * atan(sqrt(aper)*tanh(m0/2.0));
1325 if (t0 >= 0) t0 = t - u*sqrt(t0)*m0;
1332 aper = 2.0 * atan(su);
1335 if (t0 >= 0) t0 = t - sqrt(t0) * (su*su*su/3.0 + su);
1339 if (m0 < 0.0) m0 = m0 + p2;
1340 if (ran < 0.0) ran = ran + p2;
1341 if (aper < 0.0) aper = aper + p2;
1347 if (ecc > 1.0) m0 = 0.0;
1370 l = 280.460 + 0.9856474*n;
1371 g = 357.528 + 0.9856003*n;
1374 l = l + (1.915*sin(g) + 0.020*sin(2.0*g)) * 1.74532925199e-2;
1375 g = 1.00014 - 0.01671*cos(g) - 0.00014*cos(2.0*g);
1407 const double p2 = 2.0 *
M_PI;
1414 dl = 0.0; dr = 0.0; db = 0.0;
1415 m2 = p2 *
frac(0.1387306 + 162.5485917*t);
1416 m3 = p2 *
frac(0.9931266 + 99.9973604*t);
1417 m4 = p2 *
frac(0.0543250 + 53.1666028*t);
1418 m5 = p2 *
frac(0.0551750 + 8.4293972*t);
1419 m6 = p2 *
frac(0.8816500 + 3.3938722*t);
1420 d = p2 *
frac(0.8274 + 1236.8531*t);
1421 a= p2 *
frac(0.3749 + 1325.5524*t);
1422 uu = p2 *
frac(0.2591 + 1342.2278*t);
1424 c3[1] = 1.0; s3[1] = 0.0;
1425 c3[2] = cos(m3); s3[2] = sin(m3);
1426 c3[0] = c3[2]; s3[0] = -s3[2];
1429 addthe(c3[i-1],s3[i-1],c3[2],s3[2],c3[i],s3[i]);
1430 pertven(); pertmar(); pertjup(); pertsat(); pertmoo();
1432 dl = dl + 6.4 * sin(p2*(0.6983 + 0.0561*t))
1433 + 1.87 * sin(p2*(0.5764 + 0.4174*t))
1434 + 0.27 * sin(p2*(0.4189 + 0.3306*t))
1435 + 0.20 * sin(p2*(0.3581 + 2.4814*t));
1436 l = p2 *
frac(0.7859453 + m3/p2 +((6191.2+1.1*t)*t+dl)/1296.0E3);
1437 r = 1.0001398 - 0.0000007*t + dr*1E-6;
1438 b = db * 4.8481368111E-6;
1440 cl= cos(l); sl=sin(l); cb=cos(b); sb=sin(b);
1441 rs[0]=r*cl*cb; rs[1]=r*sl*cb; rs[2]=r*sb;
1450 uu = m3 + 0.0334172*sin(m3);
1453 a = 1.0 - 0.0167086*d;
1454 vs[0] = -1.7202085e-2*uu/a;
1455 vs[1] = 1.71996836e-2*d/a;
1456 uu = atan2 (0.9998604*uu, (d-0.0167086));
1459 dr = d*vs[0]+uu*vs[1];
1460 dl = (d*vs[1]-uu*vs[0]) / r;
1462 vs[0] = dr*cl*cb - dl*r*sl*cb;
1463 vs[1] = dr*sl*cb + dl*r*cl*cb;
1467 void Sun200::addthe (
double c1,
double s1,
double c2,
double s2,
1468 double& cc,
double& ss)
1474 void Sun200::term (
int i1,
int i,
int it,
double dlc,
double dls,
double drc,
1475 double drs,
double dbc,
double dbs)
1477 if (it == 0) addthe (c3[i1+1],s3[i1+1],c[i+8],s[i+8],u,v);
1483 dl = dl + dlc*u + dls*v;
1484 dr = dr + drc*u + drs*v;
1485 db = db + dbc*u + dbs*v;
1488 void Sun200::pertven()
1492 c[8]=1.0; s[8]=0.0; c[7]=cos(m2); s[7]=-sin(m2);
1494 addthe(c[i],s[i],c[7],s[7],c[i-1],s[i-1]);
1496 term (1, 0, 0, -0.22, 6892.76, -16707.37, -0.54, 0.0, 0.0);
1497 term (1, 0, 1, -0.06, -17.35, 42.04, -0.15, 0.0, 0.0);
1498 term (1, 0, 2, -0.01, -0.05, 0.13, -0.02, 0.0, 0.0);
1499 term (2, 0, 0, 0.0, 71.98, -139.57, 0.0, 0.0, 0.0);
1500 term (2, 0, 1, 0.0, -0.36, 0.7, 0.0, 0.0, 0.0);
1501 term (3, 0, 0, 0.0, 1.04, -1.75, 0.0, 0.0, 0.0);
1502 term (0, -1, 0, 0.03, -0.07, -0.16, -0.07, 0.02, -0.02);
1503 term (1, -1, 0, 2.35, -4.23, -4.75, -2.64, 0.0, 0.0);
1504 term (1, -2, 0, -0.1, 0.06, 0.12, 0.2, 0.02, 0.0);
1505 term (2, -1, 0, -0.06, -0.03, 0.2, -0.01, 0.01, -0.09);
1506 term (2, -2, 0, -4.7, 2.9, 8.28, 13.42, 0.01, -0.01);
1507 term (3, -2, 0, 1.8, -1.74, -1.44, -1.57, 0.04, -0.06);
1508 term (3, -3, 0, -0.67, 0.03, 0.11, 2.43, 0.01, 0.0);
1509 term (4, -2, 0, 0.03, -0.03, 0.1, 0.09, 0.01, -0.01);
1510 term (4, -3, 0, 1.51, -0.4, -0.88, -3.36, 0.18, -0.1);
1511 term (4, -4, 0, -0.19, -0.09, -0.38, 0.77, 0.0, 0.0);
1512 term (5, -3, 0, 0.76, -0.68, 0.3, 0.37, 0.01, 0.0);
1513 term (5, -4, 0, -0.14, -0.04, -0.11, 0.43, -0.03, 0.0);
1514 term (5, -5, 0, -0.05, -0.07, -0.31, 0.21, 0.0, 0.0);
1515 term (6, -4, 0, 0.15, -0.04, -0.06, -0.21, 0.01, 0.0);
1516 term (6, -5, 0, -0.03, -0.03, -0.09, 0.09, -0.01, 0.0);
1517 term (6, -6, 0, 0.0, -0.04, -0.18, 0.02, 0.0, 0.0);
1518 term (7, -5, 0, -0.12, -0.03, -0.08, 0.31, -0.02, -0.01);
1521 void Sun200::pertmar()
1525 c[7] = cos(m4); s[7] = -sin(m4);
1527 addthe(c[i],s[i],c[7],s[7],c[i-1],s[i-1]);
1528 term (1, -1, 0, -0.22, 0.17, -0.21, -0.27, 0.0, 0.0);
1529 term (1, -2, 0, -1.66, 0.62, 0.16, 0.28, 0.0, 0.0);
1530 term (2, -2, 0, 1.96, 0.57, -1.32, 4.55, 0.0, 0.01);
1531 term (2, -3, 0, 0.4, 0.15, -0.17, 0.46, 0.0, 0.0);
1532 term (2, -4, 0, 0.53, 0.26, 0.09, -0.22, 0.0, 0.0);
1533 term (3, -3, 0, 0.05, 0.12, -0.35, 0.15, 0.0, 0.0);
1534 term (3, -4, 0, -0.13, -0.48, 1.06, -0.29, 0.01, 0.0);
1535 term (3, -5, 0, -0.04, -0.2, 0.2, -0.04, 0.0, 0.0);
1536 term (4, -4, 0, 0.0, -0.03, 0.1, 0.04, 0.0, 0.0);
1537 term (4, -5, 0, 0.05, -0.07, 0.2, 0.14, 0.0, 00);
1538 term (4, -6, 0, -0.1, 0.11, -0.23, -0.22, 0.0, 0.0);
1539 term (5, -7, 0, -0.05, 0.0, 0.01, -0.14, 0.0, 0.0);
1540 term (5, -8, 0, 0.05, 0.01, -0.02, 0.1, 0.0, 0.0);
1543 void Sun200::pertjup()
1547 c[7] = cos(m5); s[7] = -sin(m5);
1549 addthe(c[i],s[i],c[7],s[7],c[i-1],s[i-1]);
1550 term (1, -1, 0, 0.01, 0.07, 0.18, -0.02, 0.0, -0.02);
1551 term (0, -1, 0, -0.31, 2.58, 0.52, 0.34, 0.02, 0.0);
1552 term (1, -1, 0, -7.21, -0.06, 0.13, -16.27, 0.0, -0.02);
1553 term (1, -2, 0, -0.54, -1.52, 3.09, -1.12, 0.01, -0.17);
1554 term (1, -3, 0, -0.03, -0.21, 0.38, -0.06, 0.0, -0.02);
1555 term (2, -1, 0, -0.16, 0.05, -0.18, -0.31, 0.01, 0.0);
1556 term (2, -2, 0, 0.14, -2.73, 9.23, 0.48, 0.0, 0.0);
1557 term (2, -3, 0, 0.07, -0.55, 1.83, 0.25, 0.01, 0.0);
1558 term (2, -4, 0, 0.02, -0.08, 0.25, 0.06, 0.0, 0.0);
1559 term (3, -2, 0, 0.01, -0.07, 0.16, 0.04, 0.0, 0.0);
1560 term (3, -3, 0, -0.16, -0.03, 0.08, -0.64, 0.0, 0.0);
1561 term (3, -4, 0, -0.04, -0.01, 0.03, -0.17, 0.0, 0.0);
1564 void Sun200::pertsat()
1566 c[7] = cos(m6); s[7] = -sin(m6);
1567 addthe(c[7],s[7],c[7],s[7],c[6],s[6]);
1568 term (0, -1, 0, 0.0, 0.32, 0.01, 0.0, 0.0, 0.0);
1569 term (1, -1, 0, -0.08, -0.41, 0.97, -0.18, 0.0, -0.01);
1570 term (1, -2, 0, 0.04, 0.1, -0.23, 0.1, 0.0, 0.0);
1571 term (2, -2, 0, 0.04, 0.1, -0.35, 0.13, 0.0, 0.0);
1574 void Sun200::pertmoo()
1576 dl = dl + 6.45*sin(d) - 0.42*sin(d-a) + 0.18*sin(d+a) + 0.17*sin(d-m3) - 0.06*sin(d+m3);
1577 dr = dr + 30.76*cos(d) - 3.06*cos(d-a) + 0.85*cos(d+a) - 0.58*cos(d+m3) + 0.57*cos(d-m3);
1578 db = db + 0.576*sin(uu);
1596 const double arc = 206264.81;
1597 const double pi2 =
M_PI * 2.0;
1599 double lambda, beta, r, fac;
1602 solar1(); solar2(); solar3(); solarn(n); planetary(t);
1604 lambda = pi2 *
frac ((l0+dlam/arc) / pi2);
1605 if (lambda < 0) lambda = lambda + pi2;
1608 fac = 1.000002708 + 139.978 * dgam;
1609 beta = (fac*(18518.511+1.189+gam1c)*sin(s)-6.24*sin(3*s)+n);
1610 beta = beta * 4.8481368111e-6;
1611 sinpi = sinpi * 0.999953253;
1614 rm.
assign (r, lambda, beta);
1621 void Moon200::addthe (
double c1,
double s1,
double c2,
double s2,
1622 double& c,
double& s)
1628 double Moon200::sinus (
double phi)
1634 void Moon200::long_periodic (
double t)
1638 double s1, s2, s3, s4, s5, s6, s7;
1640 s1 = sinus (0.19833 + 0.05611*t);
1641 s2 = sinus (0.27869 + 0.04508*t);
1642 s3 = sinus (0.16827 - 0.36903*t);
1643 s4 = sinus (0.34734 - 5.37261*t);
1644 s5 = sinus (0.10498 - 5.37899*t);
1645 s6 = sinus (0.42681 - 0.41855*t);
1646 s7 = sinus (0.14943 - 5.37511*t);
1647 dl0 = 0.84*s1 + 0.31*s2 + 14.27*s3 + 7.26*s4 + 0.28*s5 + 0.24*s6;
1648 dl = 2.94*s1 + 0.31*s2 + 14.27*s3 + 9.34*s4 + 1.12*s5 + 0.83*s6;
1649 dls = -6.4*s1 - 1.89*s6;
1650 df = 0.21*s1+0.31*s2+14.27*s3-88.7*s4-15.3*s5+0.24*s6-1.86*s7;
1652 dgam = -3332E-9 * sinus (0.59734 - 5.37261*t)
1653 -539E-9 * sinus (0.35498 - 5.37899*t)
1654 -64E-9 * sinus (0.39943 - 5.37511*t);
1657 void Moon200::minit(
double t)
1662 const double arc = 206264.81;
1663 const double pi2 =
M_PI * 2.0;
1666 double t2, arg, fac;
1673 dlam = 0; ds = 0; gam1c = 0; sinpi = 3422.7;
1675 l0 = pi2*
frac(0.60643382+1336.85522467*t-0.00000313*t2) + dl0/arc;
1676 l = pi2*
frac(0.37489701+1325.55240982*t+0.00002565*t2) + dl/arc;
1677 ls = pi2*
frac(0.99312619+99.99735956*t-0.00000044*t2) + dls/arc;
1678 f = pi2*
frac(0.25909118+1342.22782980*t-0.00000892*t2) + df/arc;
1679 d = pi2*
frac(0.82736186+1236.85308708*t-0.00000397*t2) + dd/arc;
1684 case 0: arg=l; max=4; fac=1.000002208;
break;
1685 case 1: arg=ls; max=3; fac=0.997504612-0.002495388*t;
break;
1686 case 2: arg=f; max=4; fac=1.000002708+139.978*dgam;
break;
1687 case 3: arg=d; max=6; fac=1.0;
break;
1689 co[6][i] = 1.0; co[7][i] = cos (arg) * fac;
1690 si[6][i] = 0.0; si[7][i] = sin (arg) * fac;
1691 for (j = 2; j <= max; ++j)
1692 addthe(co[j+5][i],si[j+5][i],co[7][i],si[7][i],co[j+6][i],si[j+6][i]);
1693 for (j = 1; j <= max; ++j)
1695 co[6-j][i]=co[j+6][i];
1696 si[6-j][i]=-si[j+6][i];
1701 void Moon200::term (
int p,
int q,
int r,
int s,
double& x,
double& y)
1707 i[0]=p; i[1]=q; i[2]=r; i[3]=s; x=1.0; y=0.0;
1709 if (i[k]!=0) addthe(x,y,co[i[k]+6][k],si[i[k]+6][k],x,y);
1712 void Moon200::addsol(
double coeffl,
double coeffs,
double coeffg,
1713 double coeffp,
int p,
int q,
int r,
int s)
1717 dlam = dlam + coeffl*y; ds = ds + coeffs*y;
1718 gam1c = gam1c + coeffg*x; sinpi = sinpi + coeffp*x;
1721 void Moon200::solar1()
1723 addsol ( 13.902, 14.06, -0.001, 0.2607, 0, 0, 0, 4);
1724 addsol ( 0.403, -4.01, 0.394, 0.0023, 0, 0, 0, 3);
1725 addsol ( 2369.912, 2373.36, 0.601, 28.2333, 0, 0, 0, 2);
1726 addsol ( -125.154, -112.79, -0.725, -0.9781, 0, 0, 0, 1);
1727 addsol ( 1.979, 6.98, -0.445, 0.0433, 1, 0, 0, 4);
1728 addsol (191.953, 192.72, 0.029, 3.0861, 1, 0, 0, 2);
1729 addsol (-8.466, -13.51, 0.455, -0.1093, 1, 0, 0, 1);
1730 addsol (22639.5, 22609.07, 0.079, 186.5398, 1, 0, 0, 0);
1731 addsol (18.609, 3.59, -0.094, 0.0118, 1, 0, 0, -1);
1732 addsol (-4586.465, -4578.13, -0.077, 34.3117, 1, 0, 0, -2);
1733 addsol (3.215, 5.44, 0.192, -0.0386, 1, 0, 0, -3);
1734 addsol (-38.428, -38.64, 0.001, 0.6008, 1, 0, 0, -4);
1735 addsol (-0.393, -1.43, -0.092, 0.0086, 1, 0, 0, -6);
1736 addsol (-0.289, -1.59, 0.123, -0.0053, 0, 1, 0, 4);
1737 addsol (-24.420, -25.1, 0.04, -0.3, 0, 1, 0, 2);
1738 addsol (18.023, 17.93, 0.007, 0.1494, 0, 1, 0, 1);
1739 addsol (-668.146, -126.98, -1.302, -0.3997, 0, 1, 0, 0);
1740 addsol (0.56, 0.32, -0.001, -0.0037, 0, 1, 0, -1);
1741 addsol (-165.145, -165.06, 0.054, 1.9178, 0, 1, 0, -2);
1742 addsol (-1.877, -6.46, -0.416, 0.0339, 0, 1, 0, -4);
1743 addsol (0.213, 1.02, -0.074, 0.0054, 2, 0, 0, 4);
1744 addsol (14.387, 14.78, -0.017, 0.2833, 2, 0, 0, 2);
1745 addsol (-0.586, -1.2, 0.054, -0.01, 2, 0, 0, 1);
1746 addsol (769.016, 767.96, 0.107, 10.1657, 2, 0, 0, 0);
1747 addsol (1.75, 2.01, -0.018, 0.0155, 2, 0, 0, -1);
1748 addsol (-211.656, -152.53, 5.679, -0.3039, 2, 0, 0, -2);
1749 addsol (1.225, 0.91, -0.03, -0.0088, 2, 0, 0, -3);
1750 addsol (-30.773, -34.07, -0.308, 0.3722, 2, 0, 0, -4);
1751 addsol (-0.57, -1.4, -0.074, 0.0109, 2, 0, 0, -6);
1752 addsol (-2.921, -11.75, 0.787, -0.0484, 1, 1, 0, 2);
1753 addsol (1.267, 1.52, -0.022, 0.0164, 1, 1, 0, 1);
1754 addsol (-109.673, -115.18, 0.461, -0.949, 1, 1, 0, 0);
1755 addsol (-205.962, -182.36, 2.056, 1.4437, 1, 1, 0, -2);
1756 addsol (0.233, 0.36, 0.012, -0.0025, 1, 1, 0, -3);
1757 addsol (-4.391, -9.66, -0.471, 0.0673, 1, 1, 0, -4);
1760 void Moon200::solar2()
1762 addsol (0.283, 1.53, -0.111, 0.006, 1, -1, 0, 4);
1763 addsol (14.577, 31.7, -1.54, 0.2302, 1, -1, 0, 2);
1764 addsol (147.687, 138.76, 0.679, 1.1528, 1, -1, 0, 0);
1765 addsol (-1.089, 0.55, 0.021, 0.0, 1, -1, 0, -1);
1766 addsol (28.475, 23.59, -0.443, -0.2257, 1, -1, 0, -2);
1767 addsol (-0.276, -0.38, -0.006, -0.0036, 1, -1, 0, -3);
1768 addsol (0.636, 2.27, 0.146, -0.0102, 1, -1, 0, -4);
1769 addsol (-0.189, -1.68, 0.131, -0.0028, 0, 2, 0, 2);
1770 addsol (-7.486, -0.66, -0.037, -0.0086, 0, 2, 0, 0);
1771 addsol (-8.096, -16.35, -0.74, 0.0918, 0, 2, 0, -2);
1772 addsol (-5.741, -0.04, 0.0, -0.0009, 0, 0, 2, 2);
1773 addsol (0.255, 0.0, 0.0, 0.0, 0, 0, 2, 1);
1774 addsol (-411.608, -0.2, 0.0, -0.0124, 0, 0, 2, 0);
1775 addsol (0.584, 0.84, 0.0, 0.0071, 0, 0, 2, -1);
1776 addsol (-55.173, -52.14, 0.0, -0.1052, 0, 0, 2, -2);
1777 addsol (0.254, 0.25, 0.0, -0.0017, 0, 0, 2, -3);
1778 addsol (0.025, -1.67, 0.0, 0.0031, 0, 0, 2, -4);
1779 addsol (1.06, 2.96, -0.166, 0.0243, 3, 0, 0, 2);
1780 addsol (36.124, 50.64, -1.3, 0.6215, 3, 0, 0, 0);
1781 addsol (-13.193, -16.4, 0.258, -0.1187, 3, 0, 0, -2);
1782 addsol (-1.187, -0.74, 0.042, 0.0074, 3, 0, 0, -4);
1783 addsol (-0.293, -0.31, -0.002, 0.0046, 3, 0, 0, -6);
1784 addsol (-0.29, -1.45, 0.116, -0.0051, 2, 1, 0, 2);
1785 addsol (-7.649, -10.56, 0.259, -0.1038, 2, 1, 0, 0);
1786 addsol (-8.627, -7.59, 0.078, -0.0192, 2, 1, 0, -2);
1787 addsol (-2.74, -2.54, 0.022, 0.0324, 2, 1, 0, -4);
1788 addsol (1.181, 3.32, -0.212, 0.0213, 2, -1, 0, 2);
1789 addsol (9.703, 11.67, -0.151, 0.1268, 2, -1, 0, 0);
1790 addsol (-0.352, -0.37, 0.001, -0.0028, 2, -1, 0, -1);
1791 addsol (-2.494, -1.17, -0.003, -0.0017, 2, -1, 0, -2);
1792 addsol (0.36, 0.2, -0.012, -0.0043, 2, -1, 0, -4);
1793 addsol (-1.167, -1.25, 0.008, -0.0106, 1, 2, 0, 0);
1794 addsol (-7.412, -6.12, 0.117, 0.0484, 1, 2, 0, -2);
1795 addsol (-0.311, -0.65, -0.032, 0.0044, 1, 2, 0, -4);
1796 addsol (0.757, 1.82, -0.105, 0.0112, 1, -2, 0, 2);
1797 addsol (2.58, 2.32, 0.027, 0.0196, 1, -2, 0, 0);
1798 addsol (2.533, 2.4, -0.014, -0.0212, 1, -2, 0, -2);
1799 addsol (-0.344, -0.57, -0.025, 0.0036, 0, 3, 0, -2);
1800 addsol (-0.992, -0.02, 0.0, 0.0, 1, 0, 2, 2);
1801 addsol (-45.099, -0.02, 0.0, -0.0010, 1, 0, 2, 0);
1802 addsol (-0.179, -9.52, 0.0, -0.0833, 1, 0, 2, -2);
1803 addsol (-0.301, -0.33, 0.0, 0.0014, 1, 0, 2, -4);
1804 addsol (-6.382, -3.37, 0.0, -0.0481, 1, 0, -2, 2);
1805 addsol (39.528, 85.13, 0.0, -0.7136, 1, 0, -2, 0);
1806 addsol (9.366, 0.71, 0.0, -0.0112, 1, 0, -2, -2);
1807 addsol (0.202, 0.02, 0.0, 0.0, 1, 0, -2, -4);
1810 void Moon200::solar3()
1812 addsol (0.415, 0.1, 0.0, 0.0013, 0, 1, 2, 0);
1813 addsol (-2.152, -2.26, 0.0, -0.0066, 0, 1, 2, -2);
1814 addsol (-1.44, -1.3, 0.0, 0.0014, 0, 1, -2, 2);
1815 addsol (0.384, -0.04, 0.0, 0.0, 0, 1, -2, -2);
1816 addsol (1.938, 3.6, -0.145, 0.0401, 4, 0, 0, 0);
1817 addsol (-0.952, -1.58, 0.052, -0.0130, 4, 0, 0, -2);
1818 addsol (-0.551, -0.94, 0.032, -0.0097, 3, 1, 0, 0);
1819 addsol (-0.482, -0.57, 0.005, -0.0045, 3, 1, 0, -2);
1820 addsol (0.681, 0.96, -0.026, 0.0115, 3, -1, 0, 0);
1821 addsol (-0.297, -0.27, 0.002, -0.0009, 2, 2, 0, -2);
1822 addsol (0.254, 0.21, -0.003, 0.0, 2, -2, 0, -2);
1823 addsol (-0.25, -0.22, 0.004, 0.0014, 1, 3, 0, -2);
1824 addsol (-3.996, 0.0, 0.0, 0.0004, 2, 0, 2, 0);
1825 addsol (0.557, -0.75, 0.0, -0.009, 2, 0, 2, -2);
1826 addsol (-0.459, -0.38, 0.0, -0.0053, 2, 0, -2, 2);
1827 addsol (-1.298, 0.74, 0.0, 0.0004, 2, 0, -2, 0);
1828 addsol (0.538, 1.14, 0.0, -0.0141, 2, 0, -2, -2);
1829 addsol (0.263, 0.02, 0.0, 0.0, 1, 1, 2, 0);
1830 addsol (0.426, 0.07, 0.0, -0.0006, 1, 1, -2, -2);
1831 addsol (-0.304, 0.03, 0.0, 0.0003, 1, -1, 2, 0);
1832 addsol (-0.372, -0.19, 0.0, -0.0027, 1, -1, -2, 2);
1833 addsol (0.418, 0.0, 0.0, 0.0, 0, 0, 4, 0);
1834 addsol (-0.330, -0.04, 0.0, 0.0, 3, 0, 2, 0);
1837 void Moon200::addn (
double coeffn,
int p,
int q,
int r,
int s,
1838 double& n,
double&x,
double& y)
1844 void Moon200::solarn (
double& n)
1850 addn (-526.069, 0, 0, 1, -2, n, x, y);
1851 addn (-3.352, 0, 0, 1, -4, n, x, y);
1852 addn (44.297, 1, 0, 1, -2, n, x, y);
1853 addn (-6.0, 1, 0, 1, -4, n, x, y);
1854 addn (20.599, -1, 0, 1, 0, n, x, y);
1855 addn (-30.598, -1, 0, 1, -2, n, x, y);
1856 addn (-24.649, -2, 0, 1, 0, n, x, y);
1857 addn (-2.0, -2, 0, 1, -2, n, x, y);
1858 addn (-22.571, 0, 1, 1, -2, n, x, y);
1859 addn (10.985, 0, -1, 1, -2, n, x, y);
1862 void Moon200::planetary (
double t)
1867 + 0.82*sinus(0.7736 -62.5512*t)+0.31*sinus(0.0466-125.1025*t)
1868 + 0.35*sinus(0.5785-25.1042*t)+0.66*sinus(0.4591+1335.8075*t)
1869 + 0.64*sinus(0.313-91.568*t)+1.14*sinus(0.148+1331.2898*t)
1870 + 0.21*sinus(0.5918+1056.5859*t)+0.44*sinus(0.5784+1322.8595*t)
1871 + 0.24*sinus(0.2275-5.7374*t)+0.28*sinus(0.2965+2.6929*t)
1872 + 0.33*sinus(0.3132+6.3368*t);
1885 eshadow.assign (1,0,0);
1886 rint.assign (1,0,0);
1911 const double flat = 0.996633;
1912 const double ds = 218.245445;
1913 const double dm = 0.544986;
1914 double s0, s, dlt, r2, r0;
1919 equ_sun_moon(jd, tdut);
1929 eshadow =
vnorm(eshadow);
1931 s0 = -
dot(rm, eshadow);
1933 dlt = s0*s0 + 1.0 - r2;
1935 if (r0 > 0) r0 = sqrt (r0);
1939 d_umbra = (ds - dm) * s0 / r2 - dm;
1940 d_penumbra = (ds + dm) * s0 / r2 + dm;
1945 if (dlt > 0) dlt = sqrt(dlt);
1948 d_umbra = (ds - dm) * s / r2 - dm;
1949 rint = rm + s * eshadow;
1952 lamda = ve[1] -
lsidtim(jd,0,ep2)*0.261799387799;
1953 if (lamda >
M_PI) lamda -= 2.0*
M_PI;
1954 if (lamda < (-
M_PI)) lamda += 2.0*
M_PI;
1955 phi = sqrt(rint[0]*rint[0] + rint[1]*rint[1])*0.993305615;
1956 phi = atan2(rint[2],phi);
1958 if (d_umbra > 0) phase = 4;
1963 if (r0 < (1.0 + 0.5 * fabs(d_umbra)))
1965 if (d_umbra > 0) phase = 2;
1970 if (r0 < (1.0 + 0.5*d_penumbra)) phase = 1;
2000 const double flat = 0.996633;
2005 equ_sun_moon(jd, tdut);
2015 eshadow =
vnorm(eshadow);
2017 s0 = -
dot(rm, eshadow);
2018 rint = rm + s0 * eshadow;
2023 lamda = ve[1] -
lsidtim(jd,0,ep2)*0.261799387799;
2024 if (lamda >
M_PI) lamda -= 2.0*
M_PI;
2025 if (lamda < (-
M_PI)) lamda += 2.0*
M_PI;
2026 phi = sqrt(rint[0]*rint[0] + rint[1]*rint[1])*0.993305615;
2027 phi = atan2(rint[2],phi);
2034 double& dpn,
double& pang)
2050 const double flat = 0.996633;
2051 const double ds = 218.245445;
2052 const double dm = 0.544986;
2056 equ_sun_moon(jd, tdut);
2062 pang =
abs(eshadow);
2063 eshadow =
vnorm(eshadow);
2067 s0 = -
dot(rm, eshadow);
2070 dpn = (ds + dm) * s0 / r2 + dm;
2073 pang = asin((dm + ds) / (2.0 * pang));
2080 double& dpn,
double& pang)
2096 const double flat = 0.996633;
2097 const double ds = 218.245445;
2098 const double dm = 0.544986;
2102 equ_sun_moon(jd, tdut);
2108 pang =
abs(eshadow);
2109 eshadow =
vnorm(eshadow);
2113 s0 = -
dot(rm, eshadow);
2116 dpn = (ds - dm) * s0 / r2 - dm;
2119 pang = asin((ds - dm) / (2.0 * pang));
2125 void Eclipse::equ_sun_moon(
double jd,
double tdut)
2134 double ae = 23454.77992;
2137 t =
julcent (jd) + tdut / 3.15576e9;
2138 rs = sun.position(t);
2139 rm = moon.position(t);
2144 mx =
zrot(-2.4240684e-6);
2146 mx =
yrot(-1.2120342e-6);
2163 const double omega = 4.3755e-3;
2165 double dur, lm, pa, umbold;
2166 Vec3 rold, eold, rsold, rmold;
2177 if (solar(jd+dur/1440.0,tdut, lm, pa) > 3)
2179 mx =
zrot(dur*omega);
2180 rint =
mxvct(mx,rint);
2182 pa =
dot (rint, eold);
2183 lm =
dot (rint, rint) - pa*pa;
2184 if (lm > 0) lm = sqrt(lm);
2186 if (lm > 0) dur = fabs(umbold) / lm * dur * 60.0;
2201 rold =
vnorm (eold);
2202 pa =
dot(rold,eshadow);
2203 if (pa > 1.0) pa = 1.0;
2204 if (pa < -1.0) pa = -1.0;
2205 pa = fabs(sin(acos(pa)));
2206 if (pa < 0.00001) pa = 0.00001;
2207 width = d_umbra / pa * 6378.14;
2208 width = fabs(width);
2242 const double dm = 0.544986;
2243 const double ds = 218.245445;
2245 double umbra, penumbra;
2251 equ_sun_moon(jd, tdut);
2256 umbra = 1.02*fabs((ds - 2.0) * s0 / r2 - 2.0)*0.5;
2257 penumbra = 1.02*fabs((ds + 2.0) * s0 / r2 + 2.0)*0.5;
2263 sep =
dot(rs,rm)/(
abs(rs)*r2);
2264 if (fabs(sep) > 1.0) sep = 1.0;
2266 sep = fabs(tan(sep)*r2);
2269 if (sep < (umbra - dm/2.0)) phase = 4;
2270 else if (sep < (umbra + dm/2.0)) phase = 3;
2271 else if (sep < (penumbra - dm/2.0)) phase = 2;
2272 else if (sep < (penumbra + dm/2.0)) phase = 1;
void stumpff(double e2, double &c1, double &c2, double &c3)
void state(double t, Vec3 &rs, Vec3 &vs)
double Refract(double h, double p, double t)
Vec3 GeoPos(double jd, double ep2, double lat, double lng, double ht)
double duration(double jd, double tdut, double &width)
void parab(double gm, double t0, double t, double q, double ecc, Vec3 &r1, Vec3 &v1)
Vec3 equecl(double t, Vec3 &r1)
Vec3 eclequ(double t, Vec3 &r1)
int solar(double jd, double tdut, double &phi, double &lamda)
double atan20(double y, double x)
double ddd(int d, int m, double s)
double lsidtim(double jd, double lambda, double ep2)
Vec3 HorEqu(double jd, double ep2, double lat, double lng, Vec3 r)
int lunar(double jd, double tdut)
Mat3 PoleMx(double xp, double yp)
void ellip(double gm, double t0, double t, double a, double ecc, double m0, Vec3 &r1, Vec3 &v1)
Vec3 carpol(const Vec3 &c)
Vec3 vnorm(const Vec3 &c)
void maxpos(double jd, double tdut, double &phi, double &lamda)
Mat3 pmatequ(double t1, double t2)
void oscelm(double gm, double t, Vec3 &r1, Vec3 &v1, double &t0, double &m0, double &a, double &ecc, double &ran, double &aper, double &inc)
void assign(double x11, double x12, double x13, double x21, double x22, double x23, double x31, double x32, double x33)
void caldat(double mjd, int &day, int &month, int &year, double &hour)
Mat3 nutecl(double t, double &ep2)
Mat3 pmatecl(double t1, double t2)
double abs(const Vec3 &c)
Mat3 nutmat(double t, double &ep2, bool hpr)
Mat3 mxtrn(const Mat3 &m1)
void kepler(double gm, double t0, double t, double m0, double a, double ecc, double ran, double aper, double inc, Vec3 &r1, Vec3 &v1)
void AppPos(double jd, double ep2, double lat, double lng, double ht, int solsys, Vec3 r, double &azim, double &elev, double &dist)
void hyperb(double gm, double t0, double t, double a, double ecc, Vec3 &r1, Vec3 &v1)
void dms(double dd, int &d, int &m, double &s)
double eccanom(double man, double ecc)
double mjd(int day, int month, int year, double hour)
void assign(double x=0, double y=0, double z=0)
double hypanom(double mh, double ecc)
void penumd(double jd, double tdut, Vec3 &vrm, Vec3 &ves, double &dpn, double &pang)
double julcent(double mjuld)
Vec3 aberrat(double t, Vec3 &ve)
Vec3 EquHor(double jd, double ep2, double lat, double lng, Vec3 r)
double dot(const Vec3 &c1, const Vec3 &c2)
void AppRADec(double jd, double ep2, double lat, double lng, double azim, double elev, double &ra, double &dec)
void umbra(double jd, double tdut, Vec3 &vrm, Vec3 &ves, double &dpn, double &pang)
Vec3 polcar(const Vec3 &c)
Vec3 mxvct(const Mat3 &m1, Vec3 &v1)