|
|
1.1 root 1: #include "sky.h"
2:
3: extern struct nuttab
4: {
5: float f[2];
6: char c[5];
7: } nuttab[];
8:
9: nutate()
10: {
11:
12: /*
13: * uses radian, radsec, eday
14: * sets psi, eps, dpsi, deps, obliq, gst, tobliq
15: */
16:
17: double msun, mnom, noded, dmoon;
18: struct nuttab *pp;
19: double arg;
20: double Eday;
21: double capT, capT2, capT3;
22:
23: /*
24: * nutation of the equinoxes is a irregular wobble of the
25: * pole of the earths rotation whose magnitude is about
26: * 9 seconds of arc and whose period is about 18.6 years.
27: *
28: * it depends upon the pull of the sun and moon on the
29: * equatorial bulge of the earth.
30: *
31: * psi and eps are the two angles which specify the
32: * true pole with respect to the mean pole.
33: *
34: * all coeffieients are from Supplement to A.E. 1984
35: */
36:
37: pp = &nuttab[0];
38: Eday = eday - 36525;
39: capT = capt-1;
40: capT2 = capT*capT;
41: capT3 = capT2*capT;
42:
43: mnom = 134.96298139 + 13.06499294724*Eday + 8.6972e-3*capT2
44: + 17.8e-6*capT3;
45: msun = 357.52772333 + 0.98560028309*Eday - 0.16028e-3*capT2
46: - 3.33e-6*capT3;
47: noded = 93.27191028 + 13.22935024060*Eday - 3.6825e-3*capT2
48: + 3.05e-6*capT3;
49: dmoon = 297.85036306 + 12.19074911650*Eday - 1.91417e-3*capT2
50: + 5.28e-6*capT3;
51: node = 125.04452222 - .05295376484*Eday + 2.07083e-3*capT2
52: + 2.22e-6*capT3;
53: mnom *= radian;
54: msun *= radian;
55: noded *= radian;
56: dmoon *= radian;
57: node *= radian;
58:
59: /*
60: * long period terms
61: */
62:
63:
64: psi = -(17.1996+.01742*capT)*sin(node);
65: eps = (9.2025+0.00089*capT)*cos(node);
66: for(;;){
67: if(pp->f[0]==0.){
68: pp++;
69: break;
70: }
71: arg = pp->c[0]*mnom + pp->c[1]*msun + pp->c[2]*noded
72: + pp->c[3]*dmoon + pp->c[4]*node;
73: psi += pp->f[0]*sin(arg);
74: eps += pp->f[1]*cos(arg);
75: pp++;
76: }
77:
78: /*
79: * short period terms
80: */
81:
82: dpsi = 0.;
83: deps = 0.;
84: if((flags&APPARENT)==0){
85: for(;;){
86: if(pp->f[0]==0.){
87: pp++;
88: break;
89: }
90: arg = pp->c[0]*mnom + pp->c[1]*msun + pp->c[2]*noded
91: + pp->c[3]*dmoon + pp->c[4]*node;
92: dpsi += pp->f[0]*sin(arg);
93: deps += pp->f[1]*cos(arg);
94: pp++;
95: }
96: }
97:
98:
99: psi = (psi+dpsi)*radsec;
100: eps = (eps+deps)*radsec;
101: dpsi *= radsec;
102: deps *= radsec;
103:
104: obliq = 23.43929111 - .013004167*capT - 0.164e-6*capT2
105: + 0.5036e-6*capT3;
106: obliq *= radian;
107: tobliq = obliq + eps;
108:
109: gst = 100.460618375 + 360.98564736629*Eday + 0.3882667e-3*capT2
110: - 0.025e-6*capT3;
111: gst -= 180.;
112: gst = fmod(gst, 360.);
113: if(gst < 0.)
114: gst += 360.;
115: gst *= radian;
116: gst += psi*cos(tobliq);
117:
118: /*
119: * print true obliquity, mean obliquity, mean GST, and true GST.
120: */
121:
122: if(flags&GOOBIE){
123: printf("Mean G. Sid. Time: ");
124: prhms(gst - psi*cos(obliq), 4);
125: printf("\n");
126:
127: printf("App. G. Sid. Time: ");
128: prhms(gst,4);
129: printf("\n");
130:
131: printf("Goobie: %6.3f %6.3f %6.3f %6.3f\n", psi/radsec,
132: eps/radsec, dpsi/radsec, deps/radsec);
133:
134: printf("Obliquity: ");
135: prdms(tobliq,3);
136: printf("\n");
137: }
138:
139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.