~ubuntu-branches/ubuntu/warty/wmmoonclock/warty

« back to all changes in this revision

Viewing changes to Src/Moon.c

  • Committer: Bazaar Package Importer
  • Author(s): Adam Klein
  • Date: 2000-07-30 15:51:47 UTC
  • Revision ID: james.westby@ubuntu.com-20000730155147-kpcf4151rnn1bpz4
Tags: upstream-1.27
ImportĀ upstreamĀ versionĀ 1.27

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  Calculates Moon's position according to Brown's Lunar Theory...
 
3
 */
 
4
 
 
5
#include <math.h>
 
6
#define DegPerRad       57.29577951308232087680
 
7
#define RadPerDeg        0.01745329251994329576
 
8
 
 
9
double angle360();
 
10
 
 
11
 
 
12
double  TwoPi = 6.283185308;
 
13
double  ARC = 206264.81;
 
14
double  sine(), frac();
 
15
double  DLAM, DLAMS;
 
16
double  DS;
 
17
double  GAM1C;
 
18
double  SINPI;
 
19
double  N;
 
20
double  CO[14][5], SI[14][5];
 
21
 
 
22
double Moon(double T, double *LAMBDA, double *BETA, double *R, double *AGE){
 
23
 
 
24
double  T2;
 
25
double  S1, S2, S3, S4, S5, S6, S7;
 
26
double  DL0, DL, DD, DGAM, DLS, DF;
 
27
double  L0, L, LS, F, D;
 
28
double  ARG, FAC;
 
29
int     MAX, i, j;
 
30
double  S; 
 
31
 
 
32
 
 
33
    T2 = T*T;
 
34
    DLAM = 0.0, DS = 0.0, GAM1C = 0.0; SINPI = 3422.7000;
 
35
 
 
36
    /*
 
37
     * Long Periodic variations
 
38
     */
 
39
    S1 = sine( 0.19833 + 0.05611*T );
 
40
    S2 = sine( 0.27869 + 0.04508*T );
 
41
    S3 = sine( 0.16827 - 0.36903*T );
 
42
    S4 = sine( 0.34734 - 5.37261*T );
 
43
    S5 = sine( 0.10498 - 5.37899*T );
 
44
    S6 = sine( 0.42681 - 0.41855*T );
 
45
    S7 = sine( 0.14943 - 5.37511*T );
 
46
    DL0 = 0.84*S1 + 0.31*S2 + 14.27*S3 + 7.26*S4 + 0.28*S5 + 0.24*S6;
 
47
    DL  = 2.94*S1 + 0.31*S2 + 14.27*S3 + 9.34*S4 + 1.12*S5 + 0.83*S6;
 
48
    DLS = -6.40*S1 - 1.89*S6;
 
49
    DF = 0.21*S1 + 0.31*S2 + 14.27*S3 - 88.70*S4 - 15.30*S5 + 0.24*S6 - 1.86*S7;
 
50
    DD = DL0 - DLS;
 
51
    DGAM = -3332e-9 * sine( 0.59734 - 5.37261*T)
 
52
            -539e-9 * sine( 0.35498 - 5.37899*T)
 
53
             -64e-9 * sine( 0.39943 - 5.37511*T);
 
54
 
 
55
 
 
56
 
 
57
    L0  = TwoPi*frac( 0.60643382 + 1336.85522467*T - 0.00000313*T2 ) + DL0/ARC;
 
58
    L   = TwoPi*frac( 0.37489701 + 1325.55240982*T + 0.00002565*T2 ) + DL/ARC;
 
59
    LS  = TwoPi*frac( 0.99312619 +   99.99735956*T - 0.00000044*T2 ) + DLS/ARC;
 
60
    F   = TwoPi*frac( 0.25909118 + 1342.22782980*T - 0.00000892*T2 ) + DF/ARC;
 
61
    D   = TwoPi*frac( 0.82736186 + 1236.85308708*T - 0.00000397*T2 ) + DD/ARC;
 
62
 
 
63
    for (i=1; i<=4; ++i){
 
64
        switch (i){
 
65
            case 1: 
 
66
                ARG = L,  MAX = 4, FAC = 1.000002208;
 
67
                break;
 
68
            case 2: 
 
69
                ARG = LS, MAX = 3, FAC = 0.997504612 - 0.002495388*T;
 
70
                break;
 
71
            case 3: 
 
72
                ARG = F,  MAX = 4, FAC = 1.000002708 + 139.978*DGAM;
 
73
                break;
 
74
            case 4: 
 
75
                ARG = D,  MAX = 6, FAC = 1.0;
 
76
                break;
 
77
        }
 
78
    
 
79
        CO[6+0][i] = 1.0, CO[6+1][i] = cos(ARG)*FAC;
 
80
        SI[6+0][i] = 0.0, SI[6+1][i] = sin(ARG)*FAC;
 
81
        for (j=2; j<=MAX; ++j) addthe(CO[6+j-1][i], SI[6+j-1][i], CO[6+1][i], SI[6+1][i], &CO[6+j][i], &SI[6+j][i]);
 
82
        for (j=1; j<=MAX; ++j) {
 
83
            CO[6-j][i] = CO[6+j][i];
 
84
            SI[6-j][i] = -SI[6+j][i];
 
85
        }
 
86
 
 
87
 
 
88
    }
 
89
 
 
90
 
 
91
 
 
92
    /*
 
93
     *  Solar1
 
94
     */
 
95
    addsol(   13.902,   14.06,-0.001,   0.2607,0, 0, 0, 4);
 
96
    addsol(    0.403,   -4.01,+0.394,   0.0023,0, 0, 0, 3);
 
97
    addsol( 2369.912, 2373.36,+0.601,  28.2333,0, 0, 0, 2);
 
98
    addsol( -125.154, -112.79,-0.725,  -0.9781,0, 0, 0, 1);
 
99
    addsol(    1.979,    6.98,-0.445,   0.0433,1, 0, 0, 4);
 
100
    addsol(  191.953,  192.72,+0.029,   3.0861,1, 0, 0, 2);
 
101
    addsol(   -8.466,  -13.51,+0.455,  -0.1093,1, 0, 0, 1);
 
102
    addsol(22639.500,22609.07,+0.079, 186.5398,1, 0, 0, 0);
 
103
    addsol(   18.609,    3.59,-0.094,   0.0118,1, 0, 0,-1);
 
104
    addsol(-4586.465,-4578.13,-0.077,  34.3117,1, 0, 0,-2);
 
105
    addsol(   +3.215,    5.44,+0.192,  -0.0386,1, 0, 0,-3);
 
106
    addsol(  -38.428,  -38.64,+0.001,   0.6008,1, 0, 0,-4);
 
107
    addsol(   -0.393,   -1.43,-0.092,   0.0086,1, 0, 0,-6);
 
108
    addsol(   -0.289,   -1.59,+0.123,  -0.0053,0, 1, 0, 4);
 
109
    addsol(  -24.420,  -25.10,+0.040,  -0.3000,0, 1, 0, 2);
 
110
    addsol(   18.023,   17.93,+0.007,   0.1494,0, 1, 0, 1);
 
111
    addsol( -668.146, -126.98,-1.302,  -0.3997,0, 1, 0, 0);
 
112
    addsol(    0.560,    0.32,-0.001,  -0.0037,0, 1, 0,-1);
 
113
    addsol( -165.145, -165.06,+0.054,   1.9178,0, 1, 0,-2);
 
114
    addsol(   -1.877,   -6.46,-0.416,   0.0339,0, 1, 0,-4);
 
115
    addsol(    0.213,    1.02,-0.074,   0.0054,2, 0, 0, 4);
 
116
    addsol(   14.387,   14.78,-0.017,   0.2833,2, 0, 0, 2);
 
117
    addsol(   -0.586,   -1.20,+0.054,  -0.0100,2, 0, 0, 1);
 
118
    addsol(  769.016,  767.96,+0.107,  10.1657,2, 0, 0, 0);
 
119
    addsol(   +1.750,    2.01,-0.018,   0.0155,2, 0, 0,-1);
 
120
    addsol( -211.656, -152.53,+5.679,  -0.3039,2, 0, 0,-2);
 
121
    addsol(   +1.225,    0.91,-0.030,  -0.0088,2, 0, 0,-3);
 
122
    addsol(  -30.773,  -34.07,-0.308,   0.3722,2, 0, 0,-4);
 
123
    addsol(   -0.570,   -1.40,-0.074,   0.0109,2, 0, 0,-6);
 
124
    addsol(   -2.921,  -11.75,+0.787,  -0.0484,1, 1, 0, 2);
 
125
    addsol(   +1.267,    1.52,-0.022,   0.0164,1, 1, 0, 1);
 
126
    addsol( -109.673, -115.18,+0.461,  -0.9490,1, 1, 0, 0);
 
127
    addsol( -205.962, -182.36,+2.056,  +1.4437,1, 1, 0,-2);
 
128
    addsol(    0.233,    0.36, 0.012,  -0.0025,1, 1, 0,-3);
 
129
    addsol(   -4.391,   -9.66,-0.471,   0.0673,1, 1, 0,-4);
 
130
 
 
131
 
 
132
    /*
 
133
     *  Solar2
 
134
     */
 
135
    addsol(    0.283,    1.53,-0.111,  +0.0060,1,-1, 0,+4);
 
136
    addsol(   14.577,   31.70,-1.540,  +0.2302,1,-1, 0, 2);
 
137
    addsol(  147.687,  138.76,+0.679,  +1.1528,1,-1, 0, 0);
 
138
    addsol(   -1.089,    0.55,+0.021,   0.0   ,1,-1, 0,-1);
 
139
    addsol(   28.475,   23.59,-0.443,  -0.2257,1,-1, 0,-2);
 
140
    addsol(   -0.276,   -0.38,-0.006,  -0.0036,1,-1, 0,-3);
 
141
    addsol(    0.636,    2.27,+0.146,  -0.0102,1,-1, 0,-4);
 
142
    addsol(   -0.189,   -1.68,+0.131,  -0.0028,0, 2, 0, 2);
 
143
    addsol(   -7.486,   -0.66,-0.037,  -0.0086,0, 2, 0, 0);
 
144
    addsol(   -8.096,  -16.35,-0.740,   0.0918,0, 2, 0,-2);
 
145
    addsol(   -5.741,   -0.04, 0.0  ,  -0.0009,0, 0, 2, 2);
 
146
    addsol(    0.255,    0.0 , 0.0  ,   0.0   ,0, 0, 2, 1);
 
147
    addsol( -411.608,   -0.20, 0.0  ,  -0.0124,0, 0, 2, 0);
 
148
    addsol(    0.584,    0.84, 0.0  ,  +0.0071,0, 0, 2,-1);
 
149
    addsol(  -55.173,  -52.14, 0.0  ,  -0.1052,0, 0, 2,-2);
 
150
    addsol(    0.254,    0.25, 0.0  ,  -0.0017,0, 0, 2,-3);
 
151
    addsol(   +0.025,   -1.67, 0.0  ,  +0.0031,0, 0, 2,-4);
 
152
    addsol(    1.060,    2.96,-0.166,   0.0243,3, 0, 0,+2);
 
153
    addsol(   36.124,   50.64,-1.300,   0.6215,3, 0, 0, 0);
 
154
    addsol(  -13.193,  -16.40,+0.258,  -0.1187,3, 0, 0,-2);
 
155
    addsol(   -1.187,   -0.74,+0.042,   0.0074,3, 0, 0,-4);
 
156
    addsol(   -0.293,   -0.31,-0.002,   0.0046,3, 0, 0,-6);
 
157
    addsol(   -0.290,   -1.45,+0.116,  -0.0051,2, 1, 0, 2);
 
158
    addsol(   -7.649,  -10.56,+0.259,  -0.1038,2, 1, 0, 0);
 
159
    addsol(   -8.627,   -7.59,+0.078,  -0.0192,2, 1, 0,-2);
 
160
    addsol(   -2.740,   -2.54,+0.022,   0.0324,2, 1, 0,-4);
 
161
    addsol(    1.181,    3.32,-0.212,   0.0213,2,-1, 0,+2);
 
162
    addsol(    9.703,   11.67,-0.151,   0.1268,2,-1, 0, 0);
 
163
    addsol(   -0.352,   -0.37,+0.001,  -0.0028,2,-1, 0,-1);
 
164
    addsol(   -2.494,   -1.17,-0.003,  -0.0017,2,-1, 0,-2);
 
165
    addsol(    0.360,    0.20,-0.012,  -0.0043,2,-1, 0,-4);
 
166
    addsol(   -1.167,   -1.25,+0.008,  -0.0106,1, 2, 0, 0);
 
167
    addsol(   -7.412,   -6.12,+0.117,   0.0484,1, 2, 0,-2);
 
168
    addsol(   -0.311,   -0.65,-0.032,   0.0044,1, 2, 0,-4);
 
169
    addsol(   +0.757,    1.82,-0.105,   0.0112,1,-2, 0, 2);
 
170
    addsol(   +2.580,    2.32,+0.027,   0.0196,1,-2, 0, 0);
 
171
    addsol(   +2.533,    2.40,-0.014,  -0.0212,1,-2, 0,-2);
 
172
    addsol(   -0.344,   -0.57,-0.025,  +0.0036,0, 3, 0,-2);
 
173
    addsol(   -0.992,   -0.02, 0.0  ,   0.0   ,1, 0, 2, 2);
 
174
    addsol(  -45.099,   -0.02, 0.0  ,  -0.0010,1, 0, 2, 0);
 
175
    addsol(   -0.179,   -9.52, 0.0  ,  -0.0833,1, 0, 2,-2);
 
176
    addsol(   -0.301,   -0.33, 0.0  ,   0.0014,1, 0, 2,-4);
 
177
    addsol(   -6.382,   -3.37, 0.0  ,  -0.0481,1, 0,-2, 2);
 
178
    addsol(   39.528,   85.13, 0.0  ,  -0.7136,1, 0,-2, 0);
 
179
    addsol(    9.366,    0.71, 0.0  ,  -0.0112,1, 0,-2,-2);
 
180
    addsol(    0.202,    0.02, 0.0  ,   0.0   ,1, 0,-2,-4);
 
181
 
 
182
    /* 
 
183
     *  Solar3
 
184
     */
 
185
    addsol(    0.415,    0.10, 0.0  ,  0.0013,0, 1, 2, 0);
 
186
    addsol(   -2.152,   -2.26, 0.0  , -0.0066,0, 1, 2,-2);
 
187
    addsol(   -1.440,   -1.30, 0.0  , +0.0014,0, 1,-2, 2);
 
188
    addsol(    0.384,   -0.04, 0.0  ,  0.0   ,0, 1,-2,-2);
 
189
    addsol(   +1.938,   +3.60,-0.145, +0.0401,4, 0, 0, 0);
 
190
    addsol(   -0.952,   -1.58,+0.052, -0.0130,4, 0, 0,-2);
 
191
    addsol(   -0.551,   -0.94,+0.032, -0.0097,3, 1, 0, 0);
 
192
    addsol(   -0.482,   -0.57,+0.005, -0.0045,3, 1, 0,-2);
 
193
    addsol(    0.681,    0.96,-0.026,  0.0115,3,-1, 0, 0);
 
194
    addsol(   -0.297,   -0.27, 0.002, -0.0009,2, 2, 0,-2);
 
195
    addsol(    0.254,   +0.21,-0.003,  0.0   ,2,-2, 0,-2);
 
196
    addsol(   -0.250,   -0.22, 0.004,  0.0014,1, 3, 0,-2);
 
197
    addsol(   -3.996,    0.0 , 0.0  , +0.0004,2, 0, 2, 0);
 
198
    addsol(    0.557,   -0.75, 0.0  , -0.0090,2, 0, 2,-2);
 
199
    addsol(   -0.459,   -0.38, 0.0  , -0.0053,2, 0,-2, 2);
 
200
    addsol(   -1.298,    0.74, 0.0  , +0.0004,2, 0,-2, 0);
 
201
    addsol(    0.538,    1.14, 0.0  , -0.0141,2, 0,-2,-2);
 
202
    addsol(    0.263,    0.02, 0.0  ,  0.0   ,1, 1, 2, 0);
 
203
    addsol(    0.426,   +0.07, 0.0  , -0.0006,1, 1,-2,-2);
 
204
    addsol(   -0.304,   +0.03, 0.0  , +0.0003,1,-1, 2, 0);
 
205
    addsol(   -0.372,   -0.19, 0.0  , -0.0027,1,-1,-2, 2);
 
206
    addsol(   +0.418,    0.0 , 0.0  ,  0.0   ,0, 0, 4, 0);
 
207
    addsol(   -0.330,   -0.04, 0.0  ,  0.0   ,3, 0, 2, 0);
 
208
 
 
209
    N = 0.0;
 
210
    addn(-526.069, 0, 0,1,-2); addn(  -3.352, 0, 0,1,-4);
 
211
    addn( +44.297,+1, 0,1,-2); addn(  -6.000,+1, 0,1,-4);
 
212
    addn( +20.599,-1, 0,1, 0); addn( -30.598,-1, 0,1,-2);
 
213
    addn( -24.649,-2, 0,1, 0); addn(  -2.000,-2, 0,1,-2);
 
214
    addn( -22.571, 0,+1,1,-2); addn( +10.985, 0,-1,1,-2);
 
215
 
 
216
    DLAM += +0.82*sine( 0.7736   -62.5512*T ) + 0.31*sine( 0.0466  -125.1025*T )
 
217
            +0.35*sine( 0.5785   -25.1042*T ) + 0.66*sine( 0.4591 +1335.8075*T )
 
218
            +0.64*sine( 0.3130   -91.5680*T ) + 1.14*sine( 0.1480 +1331.2898*T )
 
219
            +0.21*sine( 0.5918 +1056.5859*T ) + 0.44*sine( 0.5784 +1322.8595*T )
 
220
            +0.24*sine( 0.2275    -5.7374*T ) + 0.28*sine( 0.2965    +2.6929*T )
 
221
            +0.33*sine( 0.3132    +6.3368*T );
 
222
 
 
223
 
 
224
 
 
225
 
 
226
 
 
227
 
 
228
 
 
229
 
 
230
 
 
231
    *LAMBDA = 360.0*frac( (L0+DLAM/ARC)/TwoPi );
 
232
 
 
233
    S = F + DS/ARC;
 
234
    FAC = 1.000002708 + 139.978*DGAM;
 
235
    *BETA = (FAC*(18518.511 + 1.189 + GAM1C)*sin(S) - 6.24*sin(3*S) + N)/3600.0;
 
236
 
 
237
    SINPI *= 0.999953253;
 
238
    *R = ARC/SINPI;
 
239
 
 
240
 
 
241
    DLAMS = 6893.0 * sin(LS) + 72.0 * sin(2.0*LS);
 
242
 
 
243
    *AGE = 29.530589*frac((D+(DLAM-DLAMS)/ARC)/TwoPi);
 
244
/*
 
245
printf("Diff = %f\n", 360.0*frac((D+(DLAM-DLAMS)/ARC)/TwoPi));
 
246
*/
 
247
 
 
248
    /*
 
249
     *  Return the phase.
 
250
     */
 
251
/*
 
252
    return( 0.5*(1.0 - cos(D+(DLAM-DLAMS)/ARC)) );
 
253
*/
 
254
    return( *AGE/29.530589 );
 
255
 
 
256
 
 
257
 
 
258
}
 
259
 
 
260
 
 
261
double sine(double phi){
 
262
 
 
263
    return( sin(TwoPi*frac(phi)) );
 
264
 
 
265
}
 
266
 
 
267
 
 
268
double frac(double x){
 
269
 
 
270
    x -= (int)x;
 
271
    return( (x<0) ? x+1.0 : x );
 
272
 
 
273
}
 
274
 
 
275
 
 
276
 
 
277
addsol(double COEFFL, double COEFFS, double COEFFG, double COEFFP, int P, int Q, int R, int S){
 
278
 
 
279
    double      X, Y;
 
280
 
 
281
    term(P, Q, R, S, &X, &Y);
 
282
    DLAM += COEFFL*Y;
 
283
    DS += COEFFS*Y;
 
284
    GAM1C += COEFFG*X;
 
285
    SINPI += COEFFP*X;
 
286
 
 
287
 
 
288
}
 
289
 
 
290
 
 
291
 
 
292
term(int P, int Q, int R, int S, double *X, double *Y){
 
293
 
 
294
    double      XX, YY;
 
295
    int         k, I[5];
 
296
 
 
297
    I[1] = P, I[2] = Q, I[3] = R, I[4] = S, XX = 1.0, YY = 0.0;
 
298
    for (k=1; k<=4; ++k){
 
299
        if (I[k] != 0.0){
 
300
            addthe(XX, YY, CO[6+I[k]][k], SI[6+I[k]][k], &XX, &YY);
 
301
        }
 
302
    }
 
303
    *X = XX;
 
304
    *Y = YY;
 
305
 
 
306
}
 
307
 
 
308
 
 
309
 
 
310
addthe(double C1, double S1, double C2, double S2, double *C, double *S){
 
311
 
 
312
    *C = C1*C2 - S1*S2;
 
313
    *S = S1*C2 + C1*S2;
 
314
 
 
315
 
 
316
}
 
317
 
 
318
 
 
319
addn(double COEFFN, int P, int Q, int R, int S){
 
320
 
 
321
    double      X, Y;
 
322
 
 
323
    term(P, Q, R, S, &X, &Y);
 
324
    N += COEFFN*Y;
 
325
 
 
326
 
 
327
}
 
328
 
 
329
 
 
330
 
 
331
#define R 0.61803399
 
332
#define C 0.38196601
 
333
 
 
334
double NewMoon(double ax, double bx, double cx){
 
335
 
 
336
    double      f1, f2, x0, x1, x2, x3, Moon();
 
337
    double      L, B, Rad, AGE, tol=1e-7;
 
338
 
 
339
    x0 = ax;
 
340
    x3 = cx;
 
341
    if (fabs(cx-bx) > fabs(bx-ax)){
 
342
        x1 = bx;
 
343
        x2 = bx + C*(cx-bx);
 
344
    } else {
 
345
        x2 = bx;
 
346
        x1 = bx - C*(bx-ax);
 
347
    }
 
348
    f1 = Moon(x1, &L, &B, &Rad, &AGE);
 
349
    f2 = Moon(x2, &L, &B, &Rad, &AGE);
 
350
    while (fabs(x3-x0) > tol*(fabs(x1)+fabs(x2))){
 
351
        if (f2 < f1){
 
352
            x0 = x1;
 
353
            x1 = x2;
 
354
            x2 = R*x1+C*x3;
 
355
            f1 = f2;
 
356
            f2 = Moon(x2, &L, &B, &Rad, &AGE);
 
357
        } else {
 
358
            x3 = x2;
 
359
            x2 = x1;
 
360
            x1 = R*x2+C*x0;
 
361
            f2 = f1;
 
362
            f1 = Moon(x1, &L, &B, &Rad, &AGE);
 
363
        }
 
364
    }
 
365
    if (f1 < f2){
 
366
        return(x1);
 
367
    } else {
 
368
        return(x2);
 
369
    }
 
370
}
 
371
 
 
372
 
 
373
 
 
374
 
 
375
 
 
376
/*
 
377
 * MINI_MOON: low precision lunar coordinates (approx. 5'/1')   
 
378
 *            T  : time in Julian centuries since J2000        
 
379
 *                 ( T=(JD-2451545)/36525 )                   
 
380
 *            RA : right ascension (in h; equinox of date)   
 
381
 *            DEC: declination (in deg; equinox of date)    
 
382
 *
 
383
 */
 
384
MiniMoon(double T, double *RA, double *DEC){
 
385
 
 
386
    double      L0,L,LS,F,D,H,S,N,DL,CB,L_MOON,B_MOON,V,W,X,Y,Z,RHO;
 
387
    double      frac(), cosEPS, sinEPS, P2, ARC;
 
388
 
 
389
 
 
390
    cosEPS = 0.91748;
 
391
    sinEPS = 0.39778;
 
392
    P2  = 6.283185307;
 
393
    ARC = 206264.8062;
 
394
 
 
395
 
 
396
    /*
 
397
     * mean elements of lunar orbit
 
398
     */
 
399
    L0 = frac(0.606433+1336.855225*T); /* mean longitude Moon (in rev) */   
 
400
    L  = P2*frac(0.374897+1325.552410*T); /* mean anomaly of the Moon     */
 
401
    LS = P2*frac(0.993133+  99.997361*T); /* mean anomaly of the Sun      */
 
402
    D  = P2*frac(0.827361+1236.853086*T); /* diff. longitude Moon-Sun     */
 
403
    F  = P2*frac(0.259086+1342.227825*T); /* mean argument of latitude    */
 
404
    DL  =  +22640.0*sin(L) - 4586.0*sin(L-2.0*D) + 2370.0*sin(2.0*D) +  769.0*sin(2.0*L) 
 
405
            -668.0*sin(LS)- 412.0*sin(2.0*F) - 212.0*sin(2.0*L-2.0*D) - 206.0*sin(L+LS-2.0*D)
 
406
            +192.0*sin(L+2.0*D) - 165.0*sin(LS-2.0*D) - 125.0*sin(D) - 110.0*sin(L+LS)
 
407
            +148.0*sin(L-LS) - 55.0*sin(2.0*F-2.0*D);
 
408
    S  =  F + (DL+412.0*sin(2.0*F)+541.0*sin(LS)) / ARC; 
 
409
    H  =  F-2.0*D;
 
410
    N  =  -526.0*sin(H) + 44.0*sin(L+H) - 31.0*sin(-L+H) - 23.0*sin(LS+H) 
 
411
         + 11.0*sin(-LS+H) -25.0*sin(-2.0*L+F) + 21.0*sin(-L+F);
 
412
    L_MOON  =  P2 * frac ( L0 + DL/1296e3 ); /* in rad */
 
413
    B_MOON  =  ( 18520.0*sin(S) + N ) / ARC; /* in rad */
 
414
 
 
415
    /* equatorial coordinates */
 
416
    CB = cos(B_MOON);
 
417
    X = CB*cos(L_MOON); 
 
418
    V = CB*sin(L_MOON); 
 
419
    W = sin(B_MOON);
 
420
    Y = cosEPS*V-sinEPS*W; 
 
421
    Z = sinEPS*V+cosEPS*W; 
 
422
    RHO = sqrt(1.0-Z*Z);
 
423
    *DEC  =  (360.0/P2)*atan2(Z, RHO); 
 
424
    *RA   =  ( 48.0/P2)*atan2(Y, X+RHO); 
 
425
    if (*RA<0.0) *RA += 24.0;
 
426
 
 
427
    return(0);
 
428
 
 
429
 
 
430
}
 
431
 
 
432
 
 
433