|
|
1.1 root 1: #include "sky.h"
2:
3: sat()
4: {
5: double pturbl, pturbb, pturbr;
6: double lograd;
7: double dele, enom, vnom, nd, sl;
8: double q0, v0, t0, j0, s0;
9:
10: double capj, capn, eye, comg, omg;
11: double sb, su, cu, u, b, up;
12: double sd, ca, sa;
13:
14: object = "Saturn ";
15:
16: ecc = .0558900 - .000347*capt;
17: incl = 2.49256 - .0044*capt;
18: node = 112.78364 + .87306*capt;
19: argp = 91.08897 + 1.95917*capt;
20: mrad = 9.538843;
21: anom = 175.47630 + .03345972*eday - .56527*capt;
22: motion = 120.4550/3600.;
23:
24: q0 = 102.28 + 4.092334429*eday;
25: q0 *= radian;
26: v0 = 212.536 + 1.602126105*eday;
27: v0 *= radian;
28: t0 = -1.45 + .985604737*eday;
29: t0 *= radian;
30: j0 = 225.36 + .083086735*eday;
31: j0 *= radian;
32: s0 = 175.68 + .033455441*eday;
33: s0 *= radian;
34:
35: anom = anom;
36: incl *= radian;
37: node *= radian;
38: argp *= radian;
39: anom = fmod(anom,360.)*radian;
40:
41: enom = anom + ecc*sin(anom);
42: do {
43: dele = (anom - enom + ecc * sin(enom)) /
44: (1. - ecc*cos(enom));
45: enom += dele;
46: } while(fabs(dele) > 1.e-8);
47: vnom = 2.*atan2(sqrt((1.+ecc)/(1.-ecc))*sin(enom/2.),
48: cos(enom/2.));
49: rad = mrad*(1. - ecc*cos(enom));
50:
51: lambda = vnom + argp;
52:
53: pturbl = 0.;
54:
55: lambda += pturbl*radsec;
56:
57: pturbb = 0.;
58:
59: pturbr = 0.;
60:
61: /*
62: * reduce to the ecliptic
63: */
64:
65: nd = lambda - node;
66: lambda = node + atan2(sin(nd)*cos(incl),cos(nd));
67:
68: sl = sin(incl)*sin(nd) + pturbb*radsec;
69: beta = atan2(sl, sqrt(1.-sl*sl));
70:
71: lograd = pturbr*2.30258509;
72: rad *= 1. + lograd;
73:
74:
75: lambda -= 1185.*radsec;
76: beta -= 51.*radsec;
77:
78: motion *= radian*mrad*mrad/(rad*rad);
79: semi = 83.33;
80:
81: /*
82: * here begins the computation of magnitude
83: * first find the geocentric equatorial coordinates of Saturn
84: */
85:
86: sd = rad*(cos(beta)*sin(lambda)*sin(obliq) +
87: sin(beta)*cos(obliq));
88: sa = rad*(cos(beta)*sin(lambda)*cos(obliq) -
89: sin(beta)*sin(obliq));
90: ca = rad*cos(beta)*cos(lambda);
91: sd += zms;
92: sa += yms;
93: ca += xms;
94: alpha = atan2(sa,ca);
95: delta = atan2(sd,sqrt(sa*sa+ca*ca));
96:
97: /*
98: * here are the necessary elements of Saturn's rings
99: * cf. Exp. Supp. p. 363ff.
100: */
101:
102: capj = 6.9056 - 0.4322*capt;
103: capn = 126.3615 + 3.9894*capt + 0.2403*capt2;
104: eye = 28.0743 - 0.0128*capt;
105: comg = 168.1179 + 1.3936*capt;
106: omg = 42.9236 - 2.7390*capt - 0.2344*capt2;
107:
108: capj *= radian;
109: capn *= radian;
110: eye *= radian;
111: comg *= radian;
112: omg *= radian;
113:
114: /*
115: * now find saturnicentric ring-plane coords of the earth
116: */
117:
118: sb = sin(capj)*cos(delta)*sin(alpha-capn) -
119: cos(capj)*sin(delta);
120: su = cos(capj)*cos(delta)*sin(alpha-capn) +
121: sin(capj)*sin(delta);
122: cu = cos(delta)*cos(alpha-capn);
123: u = atan2(su,cu);
124: b = atan2(sb,sqrt(su*su+cu*cu));
125:
126: /*
127: * and then the saturnicentric ring-plane coords of the sun
128: */
129:
130: su = sin(eye)*sin(beta) +
131: cos(eye)*cos(beta)*sin(lambda-comg);
132: cu = cos(beta)*cos(lambda-comg);
133: up = atan2(su,cu);
134:
135: /*
136: * at last, the magnitude
137: */
138:
139:
140: sb = sin(b);
141: mag = -8.68 +2.52*fabs(up+omg-u)-
142: 2.60*fabs(sb) + 1.25*(sb*sb);
143:
144: helio();
145: geo();
146: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.