31 {
return fmod(f,1.0); }
35 double ddd (
int d,
int m,
double s)
50 if ( (d < 0) || (m < 0) || (s < 0)) dd = -1.0;
52 dd = dd * (fabs(
double(d)) + fabs(
double(m))/60.0 + fabs(s)/3600.0);
59 void dms (
double dd,
int &d,
int &m,
double &s)
94 double mjd (
int day,
int month,
int year,
double hour)
105 a = 10000.0 * year + 100.0 * month + day;
113 b = ((year+4716)/4) - 1181;
123 else b = (year/400) - (year/100) + (year/4);
127 a = 365.0 * year - 679004.0;
128 a = a + b + int(30.6001 * (month + 1)) + day + hour / 24.0;
140 return (mjuld - 51544.5) / 36525.0;
145 void caldat (
double mjd,
int &day,
int &month,
int &year,
double &hour)
157 long int b, c, d, e, f, jd0;
159 jd0 = long(mjd + 2400001.0);
160 if (jd0 < 2299161) c = jd0 + 1524;
163 b = long (( jd0 - 1867216.25) / 36524.25);
164 c = jd0 + b - (b/4) + 1525;
167 if (mjd < -2400001.0)
169 if (mjd == floor(mjd)) jd0 = jd0 + 1;
170 c = long((-jd0 - 0.1)/ 365.25);
176 if ((c % 4) == 0) e = 61;
203 month = long((f + 123.0) / 30.6001);
204 day = f - long(month * 30.6001) + 123;
211 d = long ((c - 122.1) / 365.25);
213 f = long ((c - e) / 30.6001);
214 day = c - e - long(30.6001 * f);
215 month = f - 1 - 12 * (f / 14);
216 year = d - 4715 - ((7 + month) / 10);
219 hour = 24.0 * (mjd - floor(mjd));
229 const int td[9] = {55,55,56,56,57,58,58,59,60};
239 if (yr > 2006) yr -= 1;
240 if (yr > 2006) yr -= 1;
241 if (yr > 2007) yr -= 1;
242 if (yr > 2007) yr -= 1;
243 if (yr > 2008) yr -= 1;
245 if (yr < 1999) yr = 1999;
249 result = (((-339.84*t - 516.12)*t -160.22)*t + 92.23)*t + 71.28;
254 result = (27.5*t + 75.0)*t + 73.0;
274 result = 5.156 + 13.3066 * t * t;
275 if (yr > 1864) result = -0.6*(yr - 1865) + 6;
276 if (yr > 1884) result = -0.2*(yr - 1885) - 6;
280 if (yr > 947) result = 25.5 * t*t;
281 else result = 1360 + (44.3*t + 320.0) * t;
293 else result = floor(result + 0.5);
302 double lsidtim (
double jd,
double lambda,
double ep2)
313 ut = (jd - mjd0)*24.0;
314 t = (mjd0 - 51544.5) / 36525.0;
315 gmst = 6.697374558 + 1.0027379093*ut
316 + (8640184.812866 + (0.093104 - 6.2e-6*t)*t)*t/3600.0;
317 lmst = 24.0 *
frac((gmst + lambda/15.0) / 24.0);
318 lmst = lmst + ep2 / 3600.0;
333 tp = 23.43929111 - (46.815+(0.00059-0.001813*t)*t)*t/3600.0;
334 tp = 1.74532925199e-2 * tp;
382 const double secrad = 4.8481368111e-6;
384 double ppi, pii, pa, dt;
388 ppi = 174.876383889 + (((3289.4789+0.60622*t1)*t1) +
389 ((-869.8089-0.50491*t1) + 0.03536*dt)*dt) / 3600.0;
390 ppi = ppi * 1.74532925199e-2;
391 pii = ((47.0029-(0.06603-0.000598*t1)*t1) +
392 ((-0.03302+0.000598*t1)+0.00006*dt)*dt)*dt * secrad;
393 pa = ((5029.0966+(2.22226-0.000042*t1)*t1) +
394 ((1.11113-0.000042*t1)-0.000006*dt)*dt)*dt * secrad;
414 const double secrad = 4.8481368111e-6;
416 double dt, zeta, z, theta;
420 zeta = ((2306.2181+(1.39656-0.000139*t1)*t1) +
421 ((0.30188-0.000345*t1)+0.017998*dt)*dt)*dt * secrad;
422 z = zeta + ((0.7928+0.000411*t1)+0.000205*dt)*dt*dt * secrad;
423 theta = ((2004.3109-(0.8533+0.000217*t1)*t1) -
424 ((0.42665+0.000217*t1)+0.041833*dt)*dt)*dt * secrad;
448 const int tb1[ntb1][5] =
468 const int tb2[ntb2][5] =
507 const double tb3[ntb1][4] =
509 {-171996.0,-174.2, 92025.0, 8.9 },
510 { 2062.0, 0.2, -895.0, 0.5 },
511 { -13187.0, -1.6, 5736.0, -3.1 },
512 { 1426.0, -3.4, 54.0, -0.1 },
513 { -517.0, 1.2, 224.0, -0.6 },
514 { 217.0, -0.5, -95.0, 0.3 },
515 { 129.0, 0.1, -70.0, 0.0 },
516 { 17.0, -0.1, 0.0, 0.0 },
517 { -16.0, 0.1, 7.0, 0.0 },
518 { -2274.0, -0.2, 977.0, -0.5 },
519 { 712.0, 0.1, -7.0, 0.0 },
520 { -386.0, -0.4, 200.0, 0.0 },
521 { -301.0, 0.0, 129.0, -0.1 },
522 { 63.0, 0.1, -33.0, 0.0 },
523 { -58.0, -0.1, 32.0, 0.0 },
526 const double tb4[ntb2][2] =
565 const double secrad = 4.8481368111e-6;
566 const double p2 = 2.0 *
M_PI;
568 double ls, lm, d, f, n, dpsi, deps, ep0;
574 lm = 2.355548393544 +
575 (8328.691422883903 + (0.000151795164 + 0.000000310281*t)*t)*t;
576 ls = 6.240035939326 +
577 (628.301956024185 + (-0.000002797375 - 0.000000058178*t)*t)*t;
579 (8433.466158318464 + (-0.000064271750 + 0.000000053330*t)*t)*t;
581 (7771.377146170650 + (-0.000033408511 + 0.000000092115*t)*t)*t;
583 (-33.757045933754 + (0.000036142860 + 0.000000038785*t)*t)*t;
593 for(j=0; j<ntb1; j++)
595 ep0 = tb1[j][0]*lm + tb1[j][1]*ls + tb1[j][2]*f + tb1[j][3]*d + tb1[j][4]*n;
596 dpsi = dpsi + (tb3[j][0]+tb3[j][1]*t) * sin(ep0);
597 deps = deps + (tb3[j][2]+tb3[j][3]*t) * cos(ep0);
599 for(j=0; j<ntb2; j++)
601 ep0 = tb2[j][0]*lm + tb2[j][1]*ls + tb2[j][2]*f + tb2[j][3]*d + tb2[j][4]*n;
602 dpsi = dpsi + tb4[j][0] * sin(ep0);
603 deps = deps + tb4[j][1] * cos(ep0);
605 dpsi = 1.0e-4 * dpsi * secrad;
606 deps = 1.0e-4 * deps * secrad;
611 ls = p2 *
frac (0.993133+99.997306*t);
612 d = p2 *
frac (0.827362+1236.853087*t);
613 f = p2 *
frac (0.259089+1342.227826*t);
614 n = p2 *
frac (0.347346 - 5.372447*t);
616 dpsi = (-17.2*sin(n) - 1.319*sin(2*(f-d+n)) - 0.227*sin(2*(f+n))
617 + 0.206*sin(2*n) + 0.143*sin(ls)) * secrad;
618 deps = (+9.203*cos(n) + 0.574*cos(2*(f-d+n)) + 0.098*cos(2*(f+n))
619 -0.09*cos(2*n) ) * secrad;
629 ep2 = dpsi * cos (ep2);
630 ep2 *= 13750.9870831;
645 const double secrad = 4.8481368111e-6;
646 const double p2 = 2.0 *
M_PI;
648 double ls, d, f, n, dpsi, deps, ep0;
651 ls = p2 *
frac (0.993133+99.997306*t);
652 d = p2 *
frac (0.827362+1236.853087*t);
653 f = p2 *
frac (0.259089+1342.227826*t);
654 n = p2 *
frac (0.347346 - 5.372447*t);
656 dpsi = (-17.2*sin(n) - 1.319*sin(2*(f-d+n)) - 0.227*sin(2*(f+n))
657 + 0.206*sin(2*n) + 0.143*sin(ls)) * secrad;
659 deps = (+9.203*cos(n) + 0.574*cos(2*(f-d+n)) + 0.098*cos(2*(f+n))
660 -0.09*cos(2*n) ) * secrad;
667 ep2 = dpsi * cos (ep2);
668 ep2 *= 13750.9870831;
682 const double arctrd =
M_PI / (180.0*3600.0);
688 res.
assign(1.0,0.0,xr,0.0,1.0,-yr,-xr,yr,1.0);
701 const double p2 = 2.0 *
M_PI;
707 l = p2 *
frac(0.27908+100.00214*t);
709 va[0] = ve[0] - 9.934e-5 * sin(l) * d0;
710 va[1] = ve[1] + 9.125e-5 * cl;
711 va[2] = ve[2] + 3.927e-5 * cl;
718 Vec3 GeoPos (
double jd,
double ep2,
double lat,
double lng,
double ht)
728 double const e2 = 6.69438499959e-3;
735 np = 1.0 / (sqrt(1.0 - e2*sp*sp));
736 r[2] = ((1.0 - e2)*np + h)*sp;
738 sp = (np + h) * cos(lat);
747 Vec3 GeoPos (
double jd,
double ep2,
double lat,
double lng,
double ht,
748 double xp,
double yp)
760 double const e2 = 6.69438499959e-3;
767 np = 1.0 / (sqrt(1.0 - e2*sp*sp));
768 r[2] = ((1.0 - e2)*np + h)*sp;
769 sp = (np + h) * cos(lat);
770 r[0] = sp * cos(lng);
771 r[1] = sp * sin(lng);
774 if ((xp != 0) || (yp != 0))
835 void AppPos (
double jd,
double ep2,
double lat,
double lng,
double ht,
836 int solsys,
Vec3 r,
double& azim,
double& elev,
double& dist)
855 if (solsys) s = r -
GeoPos(jd, ep2, lat, lng, ht);
858 s =
EquHor(jd, ep2, lat, lng, s);
867 void AppRADec (
double jd,
double ep2,
double lat,
double lng,
868 double azim,
double elev,
double& ra,
double& dec)
885 s =
HorEqu(jd, ep2, lat, lng, s);
902 double const raddeg = 180.0 /
M_PI;
906 r = (r + 7.31 / (r + 4.4)) / raddeg;
907 r = (0.28*p/(t+273.0)) * 0.0167 / tan(r);
922 const double p2 = 2.0*
M_PI;
923 const double eps = 1E-11;
924 const int maxit = 15;
935 f = e - ecc*sin(e) - m;
938 while ((fabs(f) > eps) && (i < maxit))
940 e = e - f / (1.0 - ecc*cos(e));
941 f = e - ecc*sin(e) - m;
958 const double eps = 1E-11;
959 const int maxit = 15;
964 h = log (2.0*fabs(mh)/ecc+1.8);
965 if (mh < 0.0) h = -h;
966 f = ecc * sinh(h) - h - mh;
969 while ((fabs(f) > eps*(1.0+fabs(h+mh))) && (i < maxit))
971 h = h - f / (ecc*cosh(h) - 1.0);
972 f = ecc*sinh(h) - h - mh;
982 void ellip (
double gm,
double t0,
double t,
double a,
double ecc,
994 double m, e, fac, k, c, s;
996 if (fabs(a) < 1e-60) a = 1e-60;
998 if (k >= 0) k = sqrt(k);
1001 m = k * (t - t0) / a + m0;
1003 fac = sqrt(1.0 - ecc*ecc);
1006 r1.
assign (a*(c - ecc), a*fac*s, 0.0);
1008 v1.
assign (-k*s/m, k*fac*c/m, 0.0);
1013 void hyperb (
double gm,
double t0,
double t,
double a,
double ecc,
1024 double mh, h, fac, k, c, s;
1027 if (a < 1e-60) a = 1e-60;
1029 if (k >= 0) k = sqrt(k);
1032 mh = k * (t - t0) / a;
1034 fac = sqrt(ecc*ecc-1.0);
1037 r1.
assign (a*(ecc-c), a*fac*s, 0.0);
1039 v1.
assign (-k*s/mh, k*fac*c/mh, 0.0);
1044 void stumpff (
double e2,
double& c1,
double& c2,
double& c3)
1051 const double eps=1E-12;
1054 c1=0.0; c2=0.0; c3=0.0; add=1.0; n=1.0;
1057 c1=c1+add; add=add/(2.0*n);
1058 c2=c2+add; add=add/(2.0*n+1);
1059 c3=c3+add; add=-e2*add;
1064 void parab (
double gm,
double t0,
double t,
double q,
double ecc,
1076 const double eps = 1E-9;
1077 const int maxit = 15;
1079 double e2, e20, fac, c1, c2, c3, k, tau, a, u, u2;
1084 e2=0.0; fac=0.5*ecc; i=0;
1087 if (q < 1e-40) q = 1e-40;
1088 k = gm / (q*(1+ecc));
1090 if (k >= 0) k = sqrt(k);
1094 if (tau >= 0) tau= 1.5*sqrt(tau)*(t-t0);
1101 if (fac < 0.0) a = -1.0;
1102 else a = tau * sqrt(fac);
1103 a = sqrt(a*a+1.0)+a;
1104 if (a > 0.0) a = exp(log(a)/3.0);
1105 if (a == 0.0) u = 0.0;
1108 if (fac != 0) e2 = u2*(1.0-ecc)/fac;
1112 fle = (
abs(e2-e20) <
eps) || (i > maxit);
1117 tau = q*(1.0+u2*c2*ecc/fac);
1118 x = q*(1.0-u2*c2/fac);
1120 if (y >= 0) y = q*sqrt(y)*u*c1;
1123 v1.
assign (-k*y/tau, k*(x/tau+ecc), 0.0);
1134 void kepler (
double gm,
double t0,
double t,
double m0,
double a,
double ecc,
1135 double ran,
double aper,
double inc,
Vec3& r1,
Vec3& v1)
1175 const double dgrd =
M_PI / 180.0;
1176 enum {ell, par, hyp} kepc;
1188 if (ecc == 1.0) kepc = par;
1191 if (m0 < 0.0) kepc = par;
1196 if (m0 < 0.0) kepc = par;
1202 case ell :
ellip (gm, t0, t, a, ecc, m0, r1, v1);
break;
1203 case par :
parab (gm, t0, t, a, ecc, r1, v1);
break;
1204 case hyp :
hyperb (gm, t0, t, a, ecc, r1, v1);
break;
1214 r1 =
mxvct (m2, r1);
1215 v1 =
mxvct (m2, v1);
1221 double& t0,
double& m0,
double& a,
double& ecc,
1222 double& ran,
double& aper,
double& inc)
1246 const double rddg = 180.0/
M_PI;
1247 const double p2 = 2.0*
M_PI;
1250 double cabs, u, cu, su, p, r;
1260 if (gm < 1e-60) gm = 1e-60;
1263 if (fabs(cabs) < 1e-40) cabs = 1e-40;
1264 ran =
atan20 (c[0], -c[1]);
1266 if (fabs(inc) <= 1.0) inc = acos (inc);
1270 if (fabs(r) < 1e-40) r = 1e-40;
1272 if (su != 0.0) su = r1[2]/su;
1273 cu = r1[0]*cos(ran)+r1[1]*sin(ran);
1278 if (fabs(a) < 1.0E-30) ecc = 1.0;
1295 if (ecc >= 0) ecc = sqrt(ecc);
1297 p = p / (1.0 + ecc);
1300 if (fabs(a) > 1e-60) cu = (1.0 - r/a);
1302 su =
dot(r1,v1) / sqrt(fabs(a)*gm);
1309 if (aper >= 0) aper =
atan20(sqrt(aper)*su,(cu-ecc));
1315 m0 = su + sqrt(su*su + 1.0);
1316 if (m0 >= 0) m0 = log(m0);
1317 aper = (ecc+1.0)/(ecc-1.0);
1318 if (aper >= 0) aper = 2.0 * atan(sqrt(aper)*tanh(m0/2.0));
1327 if (t0 >= 0) t0 = t - u*sqrt(t0)*m0;
1334 aper = 2.0 * atan(su);
1337 if (t0 >= 0) t0 = t - sqrt(t0) * (su*su*su/3.0 + su);
1341 if (m0 < 0.0) m0 = m0 + p2;
1342 if (ran < 0.0) ran = ran + p2;
1343 if (aper < 0.0) aper = aper + p2;
1349 if (ecc > 1.0) m0 = 0.0;
1372 l = 280.460 + 0.9856474*n;
1373 g = 357.528 + 0.9856003*n;
1376 l = l + (1.915*sin(g) + 0.020*sin(2.0*g)) * 1.74532925199e-2;
1377 g = 1.00014 - 0.01671*cos(g) - 0.00014*cos(2.0*g);
1409 const double p2 = 2.0 *
M_PI;
1416 dl = 0.0; dr = 0.0; db = 0.0;
1417 m2 = p2 *
frac(0.1387306 + 162.5485917*t);
1418 m3 = p2 *
frac(0.9931266 + 99.9973604*t);
1419 m4 = p2 *
frac(0.0543250 + 53.1666028*t);
1420 m5 = p2 *
frac(0.0551750 + 8.4293972*t);
1421 m6 = p2 *
frac(0.8816500 + 3.3938722*t);
1422 d = p2 *
frac(0.8274 + 1236.8531*t);
1423 a= p2 *
frac(0.3749 + 1325.5524*t);
1424 uu = p2 *
frac(0.2591 + 1342.2278*t);
1426 c3[1] = 1.0; s3[1] = 0.0;
1427 c3[2] = cos(m3); s3[2] = sin(m3);
1428 c3[0] = c3[2]; s3[0] = -s3[2];
1431 addthe(c3[i-1],s3[i-1],c3[2],s3[2],c3[i],s3[i]);
1432 pertven(); pertmar(); pertjup(); pertsat(); pertmoo();
1434 dl = dl + 6.4 * sin(p2*(0.6983 + 0.0561*t))
1435 + 1.87 * sin(p2*(0.5764 + 0.4174*t))
1436 + 0.27 * sin(p2*(0.4189 + 0.3306*t))
1437 + 0.20 * sin(p2*(0.3581 + 2.4814*t));
1438 l = p2 *
frac(0.7859453 + m3/p2 +((6191.2+1.1*t)*t+dl)/1296.0E3);
1439 r = 1.0001398 - 0.0000007*t + dr*1E-6;
1440 b = db * 4.8481368111E-6;
1442 cl= cos(l); sl=sin(l); cb=cos(b); sb=sin(b);
1443 rs[0]=r*cl*cb; rs[1]=r*sl*cb; rs[2]=r*sb;
1452 uu = m3 + 0.0334172*sin(m3);
1455 a = 1.0 - 0.0167086*d;
1456 vs[0] = -1.7202085e-2*uu/a;
1457 vs[1] = 1.71996836e-2*d/a;
1458 uu = atan2 (0.9998604*uu, (d-0.0167086));
1461 dr = d*vs[0]+uu*vs[1];
1462 dl = (d*vs[1]-uu*vs[0]) / r;
1464 vs[0] = dr*cl*cb - dl*r*sl*cb;
1465 vs[1] = dr*sl*cb + dl*r*cl*cb;
1469 void Sun200::addthe (
double c1,
double s1,
double c2,
double s2,
1470 double& cc,
double& ss)
1476 void Sun200::term (
int i1,
int i,
int it,
double dlc,
double dls,
double drc,
1477 double drs,
double dbc,
double dbs)
1479 if (it == 0) addthe (c3[i1+1],s3[i1+1],c[i+8],s[i+8],u,v);
1485 dl = dl + dlc*u + dls*v;
1486 dr = dr + drc*u + drs*v;
1487 db = db + dbc*u + dbs*v;
1490 void Sun200::pertven()
1494 c[8]=1.0; s[8]=0.0; c[7]=cos(m2); s[7]=-sin(m2);
1496 addthe(c[i],s[i],c[7],s[7],c[i-1],s[i-1]);
1498 term (1, 0, 0, -0.22, 6892.76, -16707.37, -0.54, 0.0, 0.0);
1499 term (1, 0, 1, -0.06, -17.35, 42.04, -0.15, 0.0, 0.0);
1500 term (1, 0, 2, -0.01, -0.05, 0.13, -0.02, 0.0, 0.0);
1501 term (2, 0, 0, 0.0, 71.98, -139.57, 0.0, 0.0, 0.0);
1502 term (2, 0, 1, 0.0, -0.36, 0.7, 0.0, 0.0, 0.0);
1503 term (3, 0, 0, 0.0, 1.04, -1.75, 0.0, 0.0, 0.0);
1504 term (0, -1, 0, 0.03, -0.07, -0.16, -0.07, 0.02, -0.02);
1505 term (1, -1, 0, 2.35, -4.23, -4.75, -2.64, 0.0, 0.0);
1506 term (1, -2, 0, -0.1, 0.06, 0.12, 0.2, 0.02, 0.0);
1507 term (2, -1, 0, -0.06, -0.03, 0.2, -0.01, 0.01, -0.09);
1508 term (2, -2, 0, -4.7, 2.9, 8.28, 13.42, 0.01, -0.01);
1509 term (3, -2, 0, 1.8, -1.74, -1.44, -1.57, 0.04, -0.06);
1510 term (3, -3, 0, -0.67, 0.03, 0.11, 2.43, 0.01, 0.0);
1511 term (4, -2, 0, 0.03, -0.03, 0.1, 0.09, 0.01, -0.01);
1512 term (4, -3, 0, 1.51, -0.4, -0.88, -3.36, 0.18, -0.1);
1513 term (4, -4, 0, -0.19, -0.09, -0.38, 0.77, 0.0, 0.0);
1514 term (5, -3, 0, 0.76, -0.68, 0.3, 0.37, 0.01, 0.0);
1515 term (5, -4, 0, -0.14, -0.04, -0.11, 0.43, -0.03, 0.0);
1516 term (5, -5, 0, -0.05, -0.07, -0.31, 0.21, 0.0, 0.0);
1517 term (6, -4, 0, 0.15, -0.04, -0.06, -0.21, 0.01, 0.0);
1518 term (6, -5, 0, -0.03, -0.03, -0.09, 0.09, -0.01, 0.0);
1519 term (6, -6, 0, 0.0, -0.04, -0.18, 0.02, 0.0, 0.0);
1520 term (7, -5, 0, -0.12, -0.03, -0.08, 0.31, -0.02, -0.01);
1523 void Sun200::pertmar()
1527 c[7] = cos(m4); s[7] = -sin(m4);
1529 addthe(c[i],s[i],c[7],s[7],c[i-1],s[i-1]);
1530 term (1, -1, 0, -0.22, 0.17, -0.21, -0.27, 0.0, 0.0);
1531 term (1, -2, 0, -1.66, 0.62, 0.16, 0.28, 0.0, 0.0);
1532 term (2, -2, 0, 1.96, 0.57, -1.32, 4.55, 0.0, 0.01);
1533 term (2, -3, 0, 0.4, 0.15, -0.17, 0.46, 0.0, 0.0);
1534 term (2, -4, 0, 0.53, 0.26, 0.09, -0.22, 0.0, 0.0);
1535 term (3, -3, 0, 0.05, 0.12, -0.35, 0.15, 0.0, 0.0);
1536 term (3, -4, 0, -0.13, -0.48, 1.06, -0.29, 0.01, 0.0);
1537 term (3, -5, 0, -0.04, -0.2, 0.2, -0.04, 0.0, 0.0);
1538 term (4, -4, 0, 0.0, -0.03, 0.1, 0.04, 0.0, 0.0);
1539 term (4, -5, 0, 0.05, -0.07, 0.2, 0.14, 0.0, 00);
1540 term (4, -6, 0, -0.1, 0.11, -0.23, -0.22, 0.0, 0.0);
1541 term (5, -7, 0, -0.05, 0.0, 0.01, -0.14, 0.0, 0.0);
1542 term (5, -8, 0, 0.05, 0.01, -0.02, 0.1, 0.0, 0.0);
1545 void Sun200::pertjup()
1549 c[7] = cos(m5); s[7] = -sin(m5);
1551 addthe(c[i],s[i],c[7],s[7],c[i-1],s[i-1]);
1552 term (1, -1, 0, 0.01, 0.07, 0.18, -0.02, 0.0, -0.02);
1553 term (0, -1, 0, -0.31, 2.58, 0.52, 0.34, 0.02, 0.0);
1554 term (1, -1, 0, -7.21, -0.06, 0.13, -16.27, 0.0, -0.02);
1555 term (1, -2, 0, -0.54, -1.52, 3.09, -1.12, 0.01, -0.17);
1556 term (1, -3, 0, -0.03, -0.21, 0.38, -0.06, 0.0, -0.02);
1557 term (2, -1, 0, -0.16, 0.05, -0.18, -0.31, 0.01, 0.0);
1558 term (2, -2, 0, 0.14, -2.73, 9.23, 0.48, 0.0, 0.0);
1559 term (2, -3, 0, 0.07, -0.55, 1.83, 0.25, 0.01, 0.0);
1560 term (2, -4, 0, 0.02, -0.08, 0.25, 0.06, 0.0, 0.0);
1561 term (3, -2, 0, 0.01, -0.07, 0.16, 0.04, 0.0, 0.0);
1562 term (3, -3, 0, -0.16, -0.03, 0.08, -0.64, 0.0, 0.0);
1563 term (3, -4, 0, -0.04, -0.01, 0.03, -0.17, 0.0, 0.0);
1566 void Sun200::pertsat()
1568 c[7] = cos(m6); s[7] = -sin(m6);
1569 addthe(c[7],s[7],c[7],s[7],c[6],s[6]);
1570 term (0, -1, 0, 0.0, 0.32, 0.01, 0.0, 0.0, 0.0);
1571 term (1, -1, 0, -0.08, -0.41, 0.97, -0.18, 0.0, -0.01);
1572 term (1, -2, 0, 0.04, 0.1, -0.23, 0.1, 0.0, 0.0);
1573 term (2, -2, 0, 0.04, 0.1, -0.35, 0.13, 0.0, 0.0);
1576 void Sun200::pertmoo()
1578 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);
1579 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);
1580 db = db + 0.576*sin(uu);
1598 const double arc = 206264.81;
1599 const double pi2 =
M_PI * 2.0;
1601 double lambda, beta, r, fac;
1604 solar1(); solar2(); solar3(); solarn(n); planetary(t);
1606 lambda = pi2 *
frac ((l0+dlam/arc) / pi2);
1607 if (lambda < 0) lambda = lambda + pi2;
1610 fac = 1.000002708 + 139.978 * dgam;
1611 beta = (fac*(18518.511+1.189+gam1c)*sin(s)-6.24*sin(3*s)+n);
1612 beta = beta * 4.8481368111e-6;
1613 sinpi = sinpi * 0.999953253;
1616 rm.
assign (r, lambda, beta);
1623 void Moon200::addthe (
double c1,
double s1,
double c2,
double s2,
1624 double& c,
double& s)
1630 double Moon200::sinus (
double phi)
1636 void Moon200::long_periodic (
double t)
1640 double s1, s2, s3, s4, s5, s6, s7;
1642 s1 = sinus (0.19833 + 0.05611*t);
1643 s2 = sinus (0.27869 + 0.04508*t);
1644 s3 = sinus (0.16827 - 0.36903*t);
1645 s4 = sinus (0.34734 - 5.37261*t);
1646 s5 = sinus (0.10498 - 5.37899*t);
1647 s6 = sinus (0.42681 - 0.41855*t);
1648 s7 = sinus (0.14943 - 5.37511*t);
1649 dl0 = 0.84*s1 + 0.31*s2 + 14.27*s3 + 7.26*s4 + 0.28*s5 + 0.24*s6;
1650 dl = 2.94*s1 + 0.31*s2 + 14.27*s3 + 9.34*s4 + 1.12*s5 + 0.83*s6;
1651 dls = -6.4*s1 - 1.89*s6;
1652 df = 0.21*s1+0.31*s2+14.27*s3-88.7*s4-15.3*s5+0.24*s6-1.86*s7;
1654 dgam = -3332E-9 * sinus (0.59734 - 5.37261*t)
1655 -539E-9 * sinus (0.35498 - 5.37899*t)
1656 -64E-9 * sinus (0.39943 - 5.37511*t);
1659 void Moon200::minit(
double t)
1664 const double arc = 206264.81;
1665 const double pi2 =
M_PI * 2.0;
1668 double t2, arg, fac;
1675 dlam = 0; ds = 0; gam1c = 0; sinpi = 3422.7;
1677 l0 = pi2*
frac(0.60643382+1336.85522467*t-0.00000313*t2) + dl0/arc;
1678 l = pi2*
frac(0.37489701+1325.55240982*t+0.00002565*t2) + dl/arc;
1679 ls = pi2*
frac(0.99312619+99.99735956*t-0.00000044*t2) + dls/arc;
1680 f = pi2*
frac(0.25909118+1342.22782980*t-0.00000892*t2) + df/arc;
1681 d = pi2*
frac(0.82736186+1236.85308708*t-0.00000397*t2) + dd/arc;
1686 case 0: arg=l; max=4; fac=1.000002208;
break;
1687 case 1: arg=ls; max=3; fac=0.997504612-0.002495388*t;
break;
1688 case 2: arg=f; max=4; fac=1.000002708+139.978*dgam;
break;
1689 case 3: arg=d; max=6; fac=1.0;
break;
1691 co[6][i] = 1.0; co[7][i] = cos (arg) * fac;
1692 si[6][i] = 0.0; si[7][i] = sin (arg) * fac;
1693 for (j = 2; j <= max; j++)
1694 addthe(co[j+5][i],si[j+5][i],co[7][i],si[7][i],co[j+6][i],si[j+6][i]);
1695 for (j = 1; j <= max; j++)
1697 co[6-j][i]=co[j+6][i];
1698 si[6-j][i]=-si[j+6][i];
1703 void Moon200::term (
int p,
int q,
int r,
int s,
double& x,
double& y)
const
1709 i[0]=p; i[1]=q; i[2]=r; i[3]=s; x=1.0; y=0.0;
1711 if (i[k]!=0) addthe(x,y,co[i[k]+6][k],si[i[k]+6][k],x,y);
1714 void Moon200::addsol(
double coeffl,
double coeffs,
double coeffg,
1715 double coeffp,
int p,
int q,
int r,
int s)
1719 dlam = dlam + coeffl*y; ds = ds + coeffs*y;
1720 gam1c = gam1c + coeffg*x; sinpi = sinpi + coeffp*x;
1723 void Moon200::solar1()
1725 addsol ( 13.902, 14.06, -0.001, 0.2607, 0, 0, 0, 4);
1726 addsol ( 0.403, -4.01, 0.394, 0.0023, 0, 0, 0, 3);
1727 addsol ( 2369.912, 2373.36, 0.601, 28.2333, 0, 0, 0, 2);
1728 addsol ( -125.154, -112.79, -0.725, -0.9781, 0, 0, 0, 1);
1729 addsol ( 1.979, 6.98, -0.445, 0.0433, 1, 0, 0, 4);
1730 addsol (191.953, 192.72, 0.029, 3.0861, 1, 0, 0, 2);
1731 addsol (-8.466, -13.51, 0.455, -0.1093, 1, 0, 0, 1);
1732 addsol (22639.5, 22609.07, 0.079, 186.5398, 1, 0, 0, 0);
1733 addsol (18.609, 3.59, -0.094, 0.0118, 1, 0, 0, -1);
1734 addsol (-4586.465, -4578.13, -0.077, 34.3117, 1, 0, 0, -2);
1735 addsol (3.215, 5.44, 0.192, -0.0386, 1, 0, 0, -3);
1736 addsol (-38.428, -38.64, 0.001, 0.6008, 1, 0, 0, -4);
1737 addsol (-0.393, -1.43, -0.092, 0.0086, 1, 0, 0, -6);
1738 addsol (-0.289, -1.59, 0.123, -0.0053, 0, 1, 0, 4);
1739 addsol (-24.420, -25.1, 0.04, -0.3, 0, 1, 0, 2);
1740 addsol (18.023, 17.93, 0.007, 0.1494, 0, 1, 0, 1);
1741 addsol (-668.146, -126.98, -1.302, -0.3997, 0, 1, 0, 0);
1742 addsol (0.56, 0.32, -0.001, -0.0037, 0, 1, 0, -1);
1743 addsol (-165.145, -165.06, 0.054, 1.9178, 0, 1, 0, -2);
1744 addsol (-1.877, -6.46, -0.416, 0.0339, 0, 1, 0, -4);
1745 addsol (0.213, 1.02, -0.074, 0.0054, 2, 0, 0, 4);
1746 addsol (14.387, 14.78, -0.017, 0.2833, 2, 0, 0, 2);
1747 addsol (-0.586, -1.2, 0.054, -0.01, 2, 0, 0, 1);
1748 addsol (769.016, 767.96, 0.107, 10.1657, 2, 0, 0, 0);
1749 addsol (1.75, 2.01, -0.018, 0.0155, 2, 0, 0, -1);
1750 addsol (-211.656, -152.53, 5.679, -0.3039, 2, 0, 0, -2);
1751 addsol (1.225, 0.91, -0.03, -0.0088, 2, 0, 0, -3);
1752 addsol (-30.773, -34.07, -0.308, 0.3722, 2, 0, 0, -4);
1753 addsol (-0.57, -1.4, -0.074, 0.0109, 2, 0, 0, -6);
1754 addsol (-2.921, -11.75, 0.787, -0.0484, 1, 1, 0, 2);
1755 addsol (1.267, 1.52, -0.022, 0.0164, 1, 1, 0, 1);
1756 addsol (-109.673, -115.18, 0.461, -0.949, 1, 1, 0, 0);
1757 addsol (-205.962, -182.36, 2.056, 1.4437, 1, 1, 0, -2);
1758 addsol (0.233, 0.36, 0.012, -0.0025, 1, 1, 0, -3);
1759 addsol (-4.391, -9.66, -0.471, 0.0673, 1, 1, 0, -4);
1762 void Moon200::solar2()
1764 addsol (0.283, 1.53, -0.111, 0.006, 1, -1, 0, 4);
1765 addsol (14.577, 31.7, -1.54, 0.2302, 1, -1, 0, 2);
1766 addsol (147.687, 138.76, 0.679, 1.1528, 1, -1, 0, 0);
1767 addsol (-1.089, 0.55, 0.021, 0.0, 1, -1, 0, -1);
1768 addsol (28.475, 23.59, -0.443, -0.2257, 1, -1, 0, -2);
1769 addsol (-0.276, -0.38, -0.006, -0.0036, 1, -1, 0, -3);
1770 addsol (0.636, 2.27, 0.146, -0.0102, 1, -1, 0, -4);
1771 addsol (-0.189, -1.68, 0.131, -0.0028, 0, 2, 0, 2);
1772 addsol (-7.486, -0.66, -0.037, -0.0086, 0, 2, 0, 0);
1773 addsol (-8.096, -16.35, -0.74, 0.0918, 0, 2, 0, -2);
1774 addsol (-5.741, -0.04, 0.0, -0.0009, 0, 0, 2, 2);
1775 addsol (0.255, 0.0, 0.0, 0.0, 0, 0, 2, 1);
1776 addsol (-411.608, -0.2, 0.0, -0.0124, 0, 0, 2, 0);
1777 addsol (0.584, 0.84, 0.0, 0.0071, 0, 0, 2, -1);
1778 addsol (-55.173, -52.14, 0.0, -0.1052, 0, 0, 2, -2);
1779 addsol (0.254, 0.25, 0.0, -0.0017, 0, 0, 2, -3);
1780 addsol (0.025, -1.67, 0.0, 0.0031, 0, 0, 2, -4);
1781 addsol (1.06, 2.96, -0.166, 0.0243, 3, 0, 0, 2);
1782 addsol (36.124, 50.64, -1.3, 0.6215, 3, 0, 0, 0);
1783 addsol (-13.193, -16.4, 0.258, -0.1187, 3, 0, 0, -2);
1784 addsol (-1.187, -0.74, 0.042, 0.0074, 3, 0, 0, -4);
1785 addsol (-0.293, -0.31, -0.002, 0.0046, 3, 0, 0, -6);
1786 addsol (-0.29, -1.45, 0.116, -0.0051, 2, 1, 0, 2);
1787 addsol (-7.649, -10.56, 0.259, -0.1038, 2, 1, 0, 0);
1788 addsol (-8.627, -7.59, 0.078, -0.0192, 2, 1, 0, -2);
1789 addsol (-2.74, -2.54, 0.022, 0.0324, 2, 1, 0, -4);
1790 addsol (1.181, 3.32, -0.212, 0.0213, 2, -1, 0, 2);
1791 addsol (9.703, 11.67, -0.151, 0.1268, 2, -1, 0, 0);
1792 addsol (-0.352, -0.37, 0.001, -0.0028, 2, -1, 0, -1);
1793 addsol (-2.494, -1.17, -0.003, -0.0017, 2, -1, 0, -2);
1794 addsol (0.36, 0.2, -0.012, -0.0043, 2, -1, 0, -4);
1795 addsol (-1.167, -1.25, 0.008, -0.0106, 1, 2, 0, 0);
1796 addsol (-7.412, -6.12, 0.117, 0.0484, 1, 2, 0, -2);
1797 addsol (-0.311, -0.65, -0.032, 0.0044, 1, 2, 0, -4);
1798 addsol (0.757, 1.82, -0.105, 0.0112, 1, -2, 0, 2);
1799 addsol (2.58, 2.32, 0.027, 0.0196, 1, -2, 0, 0);
1800 addsol (2.533, 2.4, -0.014, -0.0212, 1, -2, 0, -2);
1801 addsol (-0.344, -0.57, -0.025, 0.0036, 0, 3, 0, -2);
1802 addsol (-0.992, -0.02, 0.0, 0.0, 1, 0, 2, 2);
1803 addsol (-45.099, -0.02, 0.0, -0.0010, 1, 0, 2, 0);
1804 addsol (-0.179, -9.52, 0.0, -0.0833, 1, 0, 2, -2);
1805 addsol (-0.301, -0.33, 0.0, 0.0014, 1, 0, 2, -4);
1806 addsol (-6.382, -3.37, 0.0, -0.0481, 1, 0, -2, 2);
1807 addsol (39.528, 85.13, 0.0, -0.7136, 1, 0, -2, 0);
1808 addsol (9.366, 0.71, 0.0, -0.0112, 1, 0, -2, -2);
1809 addsol (0.202, 0.02, 0.0, 0.0, 1, 0, -2, -4);
1812 void Moon200::solar3()
1814 addsol (0.415, 0.1, 0.0, 0.0013, 0, 1, 2, 0);
1815 addsol (-2.152, -2.26, 0.0, -0.0066, 0, 1, 2, -2);
1816 addsol (-1.44, -1.3, 0.0, 0.0014, 0, 1, -2, 2);
1817 addsol (0.384, -0.04, 0.0, 0.0, 0, 1, -2, -2);
1818 addsol (1.938, 3.6, -0.145, 0.0401, 4, 0, 0, 0);
1819 addsol (-0.952, -1.58, 0.052, -0.0130, 4, 0, 0, -2);
1820 addsol (-0.551, -0.94, 0.032, -0.0097, 3, 1, 0, 0);
1821 addsol (-0.482, -0.57, 0.005, -0.0045, 3, 1, 0, -2);
1822 addsol (0.681, 0.96, -0.026, 0.0115, 3, -1, 0, 0);
1823 addsol (-0.297, -0.27, 0.002, -0.0009, 2, 2, 0, -2);
1824 addsol (0.254, 0.21, -0.003, 0.0, 2, -2, 0, -2);
1825 addsol (-0.25, -0.22, 0.004, 0.0014, 1, 3, 0, -2);
1826 addsol (-3.996, 0.0, 0.0, 0.0004, 2, 0, 2, 0);
1827 addsol (0.557, -0.75, 0.0, -0.009, 2, 0, 2, -2);
1828 addsol (-0.459, -0.38, 0.0, -0.0053, 2, 0, -2, 2);
1829 addsol (-1.298, 0.74, 0.0, 0.0004, 2, 0, -2, 0);
1830 addsol (0.538, 1.14, 0.0, -0.0141, 2, 0, -2, -2);
1831 addsol (0.263, 0.02, 0.0, 0.0, 1, 1, 2, 0);
1832 addsol (0.426, 0.07, 0.0, -0.0006, 1, 1, -2, -2);
1833 addsol (-0.304, 0.03, 0.0, 0.0003, 1, -1, 2, 0);
1834 addsol (-0.372, -0.19, 0.0, -0.0027, 1, -1, -2, 2);
1835 addsol (0.418, 0.0, 0.0, 0.0, 0, 0, 4, 0);
1836 addsol (-0.330, -0.04, 0.0, 0.0, 3, 0, 2, 0);
1839 void Moon200::addn (
double coeffn,
int p,
int q,
int r,
int s,
1840 double& n,
double&x,
double& y)
const
1846 void Moon200::solarn (
double& n)
const
1852 addn (-526.069, 0, 0, 1, -2, n, x, y);
1853 addn (-3.352, 0, 0, 1, -4, n, x, y);
1854 addn (44.297, 1, 0, 1, -2, n, x, y);
1855 addn (-6.0, 1, 0, 1, -4, n, x, y);
1856 addn (20.599, -1, 0, 1, 0, n, x, y);
1857 addn (-30.598, -1, 0, 1, -2, n, x, y);
1858 addn (-24.649, -2, 0, 1, 0, n, x, y);
1859 addn (-2.0, -2, 0, 1, -2, n, x, y);
1860 addn (-22.571, 0, 1, 1, -2, n, x, y);
1861 addn (10.985, 0, -1, 1, -2, n, x, y);
1864 void Moon200::planetary (
double t)
1869 + 0.82*sinus(0.7736 -62.5512*t)+0.31*sinus(0.0466-125.1025*t)
1870 + 0.35*sinus(0.5785-25.1042*t)+0.66*sinus(0.4591+1335.8075*t)
1871 + 0.64*sinus(0.313-91.568*t)+1.14*sinus(0.148+1331.2898*t)
1872 + 0.21*sinus(0.5918+1056.5859*t)+0.44*sinus(0.5784+1322.8595*t)
1873 + 0.24*sinus(0.2275-5.7374*t)+0.28*sinus(0.2965+2.6929*t)
1874 + 0.33*sinus(0.3132+6.3368*t);
1887 eshadow.assign (1,0,0);
1888 rint.assign (1,0,0);
1913 const double flat = 0.996633;
1914 const double ds = 218.245445;
1915 const double dm = 0.544986;
1916 double s0, s, dlt, r2, r0;
1921 equ_sun_moon(jd, tdut);
1931 eshadow =
vnorm(eshadow);
1933 s0 = -
dot(rm, eshadow);
1935 dlt = s0*s0 + 1.0 - r2;
1937 if (r0 > 0) r0 = sqrt (r0);
1941 d_umbra = (ds - dm) * s0 / r2 - dm;
1942 d_penumbra = (ds + dm) * s0 / r2 + dm;
1947 if (dlt > 0) dlt = sqrt(dlt);
1950 d_umbra = (ds - dm) * s / r2 - dm;
1951 rint = rm + s * eshadow;
1954 lamda = ve[1] -
lsidtim(jd,0,ep2)*0.261799387799;
1955 if (lamda >
M_PI) lamda -= 2.0*
M_PI;
1956 if (lamda < (-
M_PI)) lamda += 2.0*
M_PI;
1957 phi = sqrt(rint[0]*rint[0] + rint[1]*rint[1])*0.993305615;
1958 phi = atan2(rint[2],phi);
1960 if (d_umbra > 0) phase = 4;
1965 if (r0 < (1.0 + 0.5 * fabs(d_umbra)))
1967 if (d_umbra > 0) phase = 2;
1972 if (r0 < (1.0 + 0.5*d_penumbra)) phase = 1;
2002 const double flat = 0.996633;
2007 equ_sun_moon(jd, tdut);
2017 eshadow =
vnorm(eshadow);
2019 s0 = -
dot(rm, eshadow);
2020 rint = rm + s0 * eshadow;
2025 lamda = ve[1] -
lsidtim(jd,0,ep2)*0.261799387799;
2026 if (lamda >
M_PI) lamda -= 2.0*
M_PI;
2027 if (lamda < (-
M_PI)) lamda += 2.0*
M_PI;
2028 phi = sqrt(rint[0]*rint[0] + rint[1]*rint[1])*0.993305615;
2029 phi = atan2(rint[2],phi);
2036 double& dpn,
double& pang)
2052 const double flat = 0.996633;
2053 const double ds = 218.245445;
2054 const double dm = 0.544986;
2058 equ_sun_moon(jd, tdut);
2064 pang =
abs(eshadow);
2065 eshadow =
vnorm(eshadow);
2069 s0 = -
dot(rm, eshadow);
2072 dpn = (ds + dm) * s0 / r2 + dm;
2075 pang = asin((dm + ds) / (2.0 * pang));
2082 double& dpn,
double& pang)
2098 const double flat = 0.996633;
2099 const double ds = 218.245445;
2100 const double dm = 0.544986;
2104 equ_sun_moon(jd, tdut);
2110 pang =
abs(eshadow);
2111 eshadow =
vnorm(eshadow);
2115 s0 = -
dot(rm, eshadow);
2118 dpn = (ds - dm) * s0 / r2 - dm;
2121 pang = asin((ds - dm) / (2.0 * pang));
2127 void Eclipse::equ_sun_moon(
double jd,
double tdut)
2136 const double ae = 23454.77992;
2139 t =
julcent (jd) + tdut / 3.15576e9;
2140 rs = sun.position(t);
2141 rm = moon.position(t);
2146 mx =
zrot(-2.4240684e-6);
2148 mx =
yrot(-1.2120342e-6);
2165 const double omega = 4.3755e-3;
2167 double dur, lm, pa, umbold;
2168 Vec3 rold, eold, rsold, rmold;
2179 if (solar(jd+dur/1440.0,tdut, lm, pa) > 3)
2181 mx =
zrot(dur*omega);
2182 rint =
mxvct(mx,rint);
2184 pa =
dot (rint, eold);
2185 lm =
dot (rint, rint) - pa*pa;
2186 if (lm > 0) lm = sqrt(lm);
2188 if (lm > 0) dur = fabs(umbold) / lm * dur * 60.0;
2203 rold =
vnorm (eold);
2204 pa =
dot(rold,eshadow);
2205 if (pa > 1.0) pa = 1.0;
2206 if (pa < -1.0) pa = -1.0;
2207 pa = fabs(sin(acos(pa)));
2208 if (pa < 0.00001) pa = 0.00001;
2209 width = d_umbra / pa * 6378.14;
2210 width = fabs(width);
2244 const double dm = 0.544986;
2245 const double ds = 218.245445;
2247 double umbra, penumbra;
2252 equ_sun_moon(jd, tdut);
2257 umbra = 1.02*fabs((ds - 2.0) * s0 / r2 - 2.0)*0.5;
2258 penumbra = 1.02*fabs((ds + 2.0) * s0 / r2 + 2.0)*0.5;
2264 sep =
dot(rs,rm)/(
abs(rs)*r2);
2265 if (fabs(sep) > 1.0) sep = 1.0;
2267 sep = fabs(tan(sep)*r2);
2270 if (sep < (umbra - dm/2.0)) phase = 4;
2271 else if (sep < (umbra + dm/2.0)) phase = 3;
2272 else if (sep < (penumbra - dm/2.0)) phase = 2;
2273 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)