1 /***************************************************************************
2 jupitermoons.cpp - description
4 begin : Fri Oct 18 2002
5 copyright : (C) 2002 by Jason Harris
6 email : kstars@30doradus.org
7 ***************************************************************************/
9 /***************************************************************************
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 ***************************************************************************/
20 #include "jupitermoons.h"
21 #include "ksnumbers.h"
25 JupiterMoons::JupiterMoons(){
26 Name
[0] = i18n( "Jupiter's moon Io", "Io" );
27 Name
[1] = i18n( "Jupiter's moon Europa", "Europa" );
28 Name
[2] = i18n( "Jupiter's moon Ganymede", "Ganymede" );
29 Name
[3] = i18n( "Jupiter's moon Callisto", "Callisto" );
31 for ( unsigned int i
=0; i
<4; ++i
) {
38 JupiterMoons::~JupiterMoons(){
41 int JupiterMoons::moonNamed( const QString
&name
) const {
42 for ( int i
=0; i
<4; ++i
) {
43 if ( Name
[i
] == name
) return i
;
48 void JupiterMoons::EquatorialToHorizontal( const dms
*LST
, const dms
*lat
) {
49 for ( int i
=0; i
<4; ++i
)
50 Pos
[i
].EquatorialToHorizontal( LST
, lat
);
53 void JupiterMoons::findPosition( const KSNumbers
*num
, const KSPlanet
*Jupiter
, const KSSun
*Sun
) {
54 double Xj
, Yj
, Zj
, Rj
;
55 double sinJB
, cosJB
, sinJL
, cosJL
;
56 double sinSB
, cosSB
, sinSL
, cosSL
;
57 double D
, t
, tdelay
, LAMBDA
, ALPHA
;
58 double T
, oj
, fj
, ij
, pa
, tb
, I
, P
;
60 //Satellite position data:
61 //l = mean longitude; Pj = longitude of perijove;
62 //w = long. of the node on Jupiter's equatorial plane
63 //G = Principal inequality in the longitude of Jupiter (whatever that means :)
64 //fl = phase of free libration
65 //z = longitude of node of Jupiter's equator on the ecliptic
66 //Gj/Gs = mean anomalies of Jupiter and Saturn
67 //Pj = Longitude of the perihelion of Jupiter
68 double l1
, l2
, l3
, l4
, p1
, p2
, p3
, p4
, w1
, w2
, w3
, w4
, G
, fl
, z
, Gj
, Gs
, Pj
;
70 //L/B = true longitude/latitude of satellites
71 double S1
, S2
, S3
, S4
, L1
, L2
, L3
, L4
, b1
, b2
, b3
, b4
, R1
, R2
, R3
, R4
;
72 double X
[5], Y
[5], Z
[5];
73 double A1
[5], B1
[5], C1
[5];
74 double A2
[5], B2
[5], C2
[5];
75 double A3
[5], B3
[5], C3
[5];
76 double A4
[5], B4
[5], C4
[5];
77 double A5
[5], B5
[5], C5
[5];
78 double A6
[5], B6
[5], C6
[5];
80 Jupiter
->ecLong()->SinCos( sinJL
, cosJL
);
81 Jupiter
->ecLat()->SinCos( sinJB
, cosJB
);
83 Sun
->ecLong()->SinCos( sinSL
, cosSL
);
84 Sun
->ecLat()->SinCos( sinSB
, cosSB
);
86 //Geocentric Rectangular coordinates of Jupiter:
87 Xj
= Jupiter
->rsun() * cosJB
*cosJL
+ Sun
->rsun() * cosSL
;
88 Yj
= Jupiter
->rsun() * cosJB
*sinJL
+ Sun
->rsun() * sinSL
;
89 Zj
= Jupiter
->rsun() * sinJB
;
91 //Distance and light-travel delay time:
92 Rj
= sqrt(Xj
*Xj
+Yj
*Yj
+ Zj
*Zj
);
93 tdelay
= 0.0057755183*Rj
;
96 if (Xj
< 0) LAMBDA
+= dms::PI
; //resolve atan ambiguity
97 ALPHA
= atan( Zj
/sqrt( Xj
*Xj
+ Yj
*Yj
) );
99 //days since 10 Aug 1976 0h (minus light-travel delay)
100 t
= num
->julianDay() - 2443000.5 - tdelay
;
102 //Mean longitudes of the satellites:
103 l1
= dms(106.07947 + 203.488955432*t
).radians();
104 l2
= dms(175.72938 + 101.374724550*t
).radians();
105 l3
= dms(120.55434 + 50.317609110*t
).radians();
106 l4
= dms( 84.44868 + 21.571071314*t
).radians();
108 //Longitudes of the satellites' Perijoves (point along orbit nearest to Jupiter)
109 p1
= dms( 58.3329 + 0.16103936*t
).radians();
110 p2
= dms(132.8959 + 0.04647985*t
).radians();
111 p3
= dms(187.2887 + 0.00712740*t
).radians();
112 p4
= dms(335.3418 + 0.00183998*t
).radians();
114 //Longitudes of the satellites' nodes on the equatorial plane of Jupiter
115 w1
= dms(311.0793 - 0.13279430*t
).radians();
116 w2
= dms(100.5099 - 0.03263047*t
).radians();
117 w3
= dms(119.1688 - 0.00717704*t
).radians();
118 w4
= dms(322.5729 - 0.00175934*t
).radians();
120 //Principal inequality in the longitude of Jupiter
121 // G = 0.33033*sin( 163.679 + 0.0010512*t ) + 0.03439*sin( 34.486 - 0.0161731*t );
122 //converted sin args to radians:
123 G
= dms(0.33033 * sin( 2.85674 + 0.0000183469*t
)
124 + 0.03439 * sin( 0.601894 - 0.000282274*t
)).radians();
126 //phase of free libration
127 fl
= dms(191.8132 + 0.17390023*t
).radians();
129 //longitude of Jupiter's equatorial node on the ecliptic
130 z
= dms(316.5182 - 0.00000208*t
).radians();
132 //Mean anomalies of Jupiter and Saturn
133 Gj
= dms(30.23756 + 0.0830925701*t
+ G
/dms::DegToRad
).radians();
134 Gs
= dms(31.97853 + 0.0334597339*t
).radians();
136 //Longitude of perihelion of Jupiter
137 Pj
= dms(13.469942).radians();
139 //***Periodic terms in the longitudes of the satellites
140 S1
= 0.47259 * sin( 2.*( l1
- l2
) )
141 - 0.03480 * sin( p3
- p4
)
142 - 0.01756 * sin( p1
+ p3
- 2.*Pj
- 2.*Gj
)
143 + 0.01080 * sin( l2
- 2.*l3
+ p3
)
144 + 0.00757 * sin( fl
)
145 + 0.00663 * sin( l2
- 2.*l3
+ p4
)
146 + 0.00453 * sin( l1
- p3
)
147 + 0.00453 * sin( l2
- 2.*l3
+ p2
)
148 - 0.00354 * sin( l1
- l2
)
149 - 0.00317 * sin( 2.*z
- 2.*Pj
)
150 - 0.00269 * sin( l2
- 2.*l3
+ p1
)
151 + 0.00263 * sin( l1
- p4
)
152 + 0.00186 * sin( l1
- p1
)
153 - 0.00186 * sin( Gj
)
154 + 0.00167 * sin( p2
- p3
)
155 + 0.00158 * sin( 4.*( l1
- l2
) )
156 - 0.00155 * sin( l1
- l3
)
157 - 0.00142 * sin( z
+w3
- 2.*Pj
- 2.*Gj
)
158 - 0.00115 * sin( 2.*( l1
- 2.*l2
+ w2
) )
159 + 0.00089 * sin( p2
- p4
)
160 + 0.00084 * sin( w2
- w3
)
161 + 0.00084 * sin( l1
+p3
- 2.*Pj
-2.*Gj
)
162 + 0.00053 * sin( z
- w2
);
164 S2
= 1.06476 * sin( 2.*( l2
- l3
) )
165 + 0.04253 * sin( l1
- 2.*l2
+ p3
)
166 + 0.03579 * sin( l2
- p3
)
167 + 0.02383 * sin( l1
- 2.*l2
+ p4
)
168 + 0.01977 * sin( l2
- p4
)
169 - 0.01843 * sin( fl
)
170 + 0.01299 * sin( p3
- p4
)
171 - 0.01142 * sin( l2
- l3
)
172 + 0.01078 * sin( l2
- p2
)
173 - 0.01058 * sin( Gj
)
174 + 0.00870 * sin( l2
- 2.*l3
+ p2
)
175 - 0.00775 * sin( 2.*( z
- Pj
) )
176 + 0.00524 * sin( 2.*( l1
- l2
) )
177 - 0.00460 * sin( l1
- l3
)
178 + 0.00450 * sin( l2
- 2.*l3
+ p1
)
179 + 0.00327 * sin( z
+ w3
- 2.*Pj
- 2.*Gj
)
180 - 0.00296 * sin( p1
+p3
- 2.*Pj
- 2.*Gj
)
181 - 0.00151 * sin( 2.*Gj
)
182 + 0.00146 * sin( z
- w3
)
183 + 0.00125 * sin( z
- w4
)
184 - 0.00117 * sin( l1
- 2.*l3
+ p3
)
185 - 0.00095 * sin( 2.*( l2
- w2
) )
186 + 0.00086 * sin( l1
- 2.*l2
+ w2
)
187 - 0.00086 * sin( 5.*Gs
- Gj
+ 0.911497 )
188 - 0.00078 * sin( l2
- l4
)
189 - 0.00064 * sin( l1
- 2.*l3
+ p4
)
190 - 0.00063 * sin( 3.*l3
- 7.*l4
+ 4.*p4
)
191 + 0.00061 * sin( p1
- p4
)
192 + 0.00058 * sin( 2.*( z
- Pj
- Gj
) )
193 + 0.00058 * sin( w3
- w4
)
194 + 0.00056 * sin( 2.*( l2
- l4
) )
195 + 0.00055 * sin( 2.*( l1
- l3
) )
196 + 0.00052 * sin( 3.*l3
- 7.*l4
+ p3
+3.*p4
)
197 - 0.00043 * sin( l1
- p3
)
198 + 0.00042 * sin( p3
- p2
)
199 + 0.00041 * sin( 5.*( l2
-l3
) )
200 + 0.00041 * sin( p4
- Pj
)
201 + 0.00038 * sin( l2
- p1
)
202 + 0.00032 * sin( w2
- w3
)
203 + 0.00032 * sin( 2.*( l3
- Gj
- Pj
) )
204 + 0.00029 * sin( p1
- p3
);
206 S3
= 0.16477 * sin( l3
- p3
)
207 + 0.09062 * sin( l3
- p4
)
208 - 0.06907 * sin( l2
- l3
)
209 + 0.03786 * sin( p3
- p4
)
210 + 0.01844 * sin( 2.*( l3
- l4
) )
211 - 0.01340 * sin( Gj
)
212 + 0.00703 * sin( l2
- 2.*l3
+ p3
)
213 - 0.00670 * sin( 2.*( z
- Pj
) )
214 - 0.00540 * sin( l3
- l4
)
215 + 0.00481 * sin( p1
+p3
- 2.*Pj
- 2.*Gj
)
216 - 0.00409 * sin( l2
- 2.*l3
+ p2
)
217 + 0.00379 * sin( l2
- 2.*l3
+ p4
)
218 + 0.00235 * sin( z
- w3
)
219 + 0.00198 * sin( z
- w4
)
220 + 0.00180 * sin( fl
)
221 + 0.00129 * sin( 3.*( l3
- l4
) )
222 + 0.00124 * sin( l1
- l3
)
223 - 0.00119 * sin( 5.*Gs
- 2.*Gj
+ 0.911497 )
224 + 0.00109 * sin( l1
- l2
)
225 - 0.00099 * sin( 3.*l3
- 7.*l4
+ 4.*p4
)
226 + 0.00091 * sin( w3
- w4
)
227 + 0.00081 * sin( 3.*l3
- 7.*l4
+ p3
+ 3.*p4
)
228 - 0.00076 * sin( 2.*l2
- 3.*l3
+ p3
)
229 + 0.00069 * sin( p4
- Pj
)
230 - 0.00058 * sin( 2.*l3
- 3.*l4
+ p4
)
231 + 0.00057 * sin( l3
+ p3
- 2.*Pj
-2.*Gj
)
232 - 0.00057 * sin( l3
- 2.*l4
+ p4
)
233 - 0.00052 * sin( p2
- p3
)
234 - 0.00052 * sin( l2
- 2.*l3
+p1
)
235 + 0.00048 * sin( l3
- 2.*l4
+p3
)
236 - 0.00045 * sin( 2.*l2
- 3.*l3
+p4
)
237 - 0.00041 * sin( p2
- p4
)
238 - 0.00038 * sin( 2.*Gj
)
239 - 0.00033 * sin( p3
- p4
+ w3
- w4
)
240 - 0.00032 * sin( 3.*l3
- 7.*l4
+2.*p3
+2.*p4
)
241 + 0.00030 * sin( 4.*( l3
- l4
) )
242 - 0.00029 * sin( w3
+ z
- 2.*Pj
- 2.*Gj
)
243 + 0.00029 * sin( l3
+ p4
- 2.*Pj
- 2.*Gj
)
244 + 0.00026 * sin( l3
- Pj
- Gj
)
245 + 0.00024 * sin( l2
- 3.*l3
+ 2.*l4
)
246 + 0.00021 * sin( 2.*( l3
- Pj
- Gj
) )
247 - 0.00021 * sin( l3
- p2
)
248 + 0.00017 * sin( 2.*( l3
- p2
) );
250 S4
= 0.84109 * sin( l4
- p4
)
251 + 0.03429 * sin( p4
- p3
)
252 - 0.03305 * sin( 2.*( z
- Pj
) )
253 - 0.03211 * sin( Gj
)
254 - 0.01860 * sin( l4
- p3
)
255 + 0.01182 * sin( z
- w4
)
256 + 0.00622 * sin( l4
+ p4
- 2.*Gj
- 2.*Pj
)
257 + 0.00385 * sin( 2.*( l4
- p4
) )
258 - 0.00284 * sin( 5.*Gs
- 2.*Gj
+ + 0.911497 )
259 - 0.00233 * sin( 2.*( z
- p4
) )
260 - 0.00223 * sin( l3
- l4
)
261 - 0.00208 * sin( l4
- Pj
)
262 + 0.00177 * sin( z
+w4
- 2.*p4
)
263 + 0.00134 * sin( p4
- Pj
)
264 + 0.00125 * sin( 2.*( l4
- Gj
- Pj
) )
265 - 0.00117 * sin( 2.*Gj
)
266 - 0.00112 * sin( 2.*( l3
- l4
) )
267 + 0.00106 * sin( 3.*l3
- 7.*l4
+ 4.*p4
)
268 + 0.00102 * sin( l4
- Gj
- Pj
)
269 + 0.00096 * sin( 2.*l4
- z
- w4
)
270 + 0.00087 * sin( 2.*( z
- w4
) )
271 - 0.00087 * sin( 3.*l3
- 7.*l4
+ p3
+ 3.*p4
)
272 + 0.00085 * sin( l3
-2.*l4
+p4
)
273 - 0.00081 * sin( 2.*(l4
- z
) )
274 + 0.00071 * sin( l4
+ p4
- 2.*Pj
- 2.*Gj
)
275 + 0.00060 * sin( l1
- l4
)
276 - 0.00056 * sin( z
- w3
)
277 - 0.00055 * sin( l3
- 2.*l4
+ p3
)
278 + 0.00051 * sin( l2
- l4
)
279 + 0.00042 * sin( 2.*( z
- Gj
- Pj
) )
280 + 0.00039 * sin( 2.*( p4
- w4
) )
281 + 0.00036 * sin( z
+ Pj
- p4
- w4
)
282 + 0.00035 * sin( 2.*Gs
- Gj
+ 3.28767 )
283 - 0.00035 * sin( l4
- p4
+ 2.*Pj
- 2.*z
)
284 - 0.00032 * sin( l4
+ p4
- 2.*Pj
- Gj
)
285 + 0.00030 * sin( 3.*l3
- 7.*l4
+ 2.*p3
+ 2.*p4
)
286 + 0.00030 * sin( 2.*Gs
- 2.*Gj
+ 2.60316 )
287 + 0.00028 * sin( l4
- p4
+ 2.*z
- 2.*Pj
)
288 - 0.00028 * sin( 2.*( l4
- w4
) )
289 - 0.00027 * sin( p3
- p4
+ w3
- w4
)
290 - 0.00026 * sin( 5.*Gs
- 3.*Gj
+ 3.28767 )
291 + 0.00025 * sin( w4
- w3
)
292 - 0.00025 * sin( l2
- 3.*l3
+ 2.*l4
)
293 - 0.00023 * sin( 3.*( l3
- l4
) )
294 + 0.00021 * sin( 2.*l4
- 2.*Pj
- 3.*Gj
)
295 - 0.00021 * sin( 2.*l3
- 3.*l4
+ p4
)
296 + 0.00019 * sin( l4
- p4
- Gj
)
297 - 0.00019 * sin( 2.*l4
- p4
+Gj
)
298 - 0.00018 * sin( l4
- p4
+ Gj
)
299 - 0.00016 * sin( l4
+ p3
- 2.*Pj
- 2.*Gj
);
301 //Convert Longitude Sums to Radians:
312 //Periodic terms in the latitudes of the satellites
313 tb
= 0.0006502 * sin( L1
- w1
)
314 + 0.0001835 * sin( L1
- w2
)
315 + 0.0000329 * sin( L1
- w3
)
316 - 0.0000311 * sin( L1
- z
)
317 + 0.0000093 * sin( L1
- w4
)
318 + 0.0000075 * sin( 3.*L1
- 4.*l2
- 1.9927*S1
+ w2
)
319 + 0.0000046 * sin( L1
+z
- 2.*Pj
- 2.*Gj
);
322 tb
= 0.0081275 * sin( L2
- w2
)
323 + 0.0004512 * sin( L2
- w3
)
324 - 0.0003286 * sin( L2
- z
)
325 + 0.0001164 * sin( L2
- w4
)
326 + 0.0000273 * sin( l1
- 2.*l3
+ 1.0146*S2
+ w2
)
327 + 0.0000143 * sin( L2
+ z
- 2.*Pj
- 2.*Gj
)
328 - 0.0000143 * sin( L2
- w1
)
329 + 0.0000035 * sin( L2
- z
+ Gj
)
330 - 0.0000028 * sin( l1
- 2.*l3
+1.0146*S2
+ w3
);
333 tb
= 0.0032364 * sin( L3
- w3
)
334 - 0.0016911 * sin( L3
- z
)
335 + 0.0006849 * sin( L3
- w4
)
336 - 0.0002806 * sin( L3
- w2
)
337 + 0.0000321 * sin( L3
+ z
- 2.*Pj
- 2.*Gj
)
338 + 0.0000051 * sin( L3
- z
+ Gj
)
339 - 0.0000045 * sin( L3
- z
- Gj
)
340 - 0.0000045 * sin( L3
+ z
- 2.*Pj
)
341 + 0.0000037 * sin( L3
+ z
- 2.*Pj
-3.*Gj
)
342 + 0.0000030 * sin( 2.*l2
- 3.*L3
+ 4.03*S3
+w2
)
343 - 0.0000021 * sin( 2.*l2
- 3.*L3
+ 4.03*S3
+w3
);
346 tb
= -0.0076579 * sin( L4
- z
)
347 + 0.0044148 * sin( L4
- w4
)
348 - 0.0005106 * sin( L4
- w3
)
349 + 0.0000773 * sin( L4
+ z
- 2.*Pj
- 2.*Gj
)
350 + 0.0000104 * sin( L4
- z
+ Gj
)
351 - 0.0000102 * sin( L4
- z
- Gj
)
352 + 0.0000088 * sin( L4
+ z
- 2.*Pj
- 3.*Gj
)
353 - 0.0000038 * sin( L4
+ z
- 2.*Pj
- Gj
);
357 //Periodic terms in the Radius of the stellites (distance from Jupiter)
359 - 0.0041339 * cos( 2.*( l1
- l2
) )
360 - 0.0000395 * cos( l1
- p3
)
361 - 0.0000214 * cos( l1
- p4
)
362 + 0.0000170 * cos( l1
- l2
)
363 - 0.0000162 * cos( l1
- p1
)
364 - 0.0000130 * cos( 4.*( l1
- l2
) )
365 + 0.0000106 * cos( l1
- l3
)
366 - 0.0000063 * cos( l1
+p3
- 2.*Pj
- 2*Gj
) );
369 0.0093847 * cos( l1
- l2
)
370 - 0.0003114 * cos( l2
- p3
)
371 - 0.0001738 * cos( l2
- p4
)
372 - 0.0000941 * cos( l2
- p2
)
373 + 0.0000553 * cos( l2
- l3
)
374 + 0.0000523 * cos( l1
- l3
)
375 - 0.0000290 * cos( 2.*( l1
- l2
) )
376 + 0.0000166 * cos( 2.*( l2
- w2
) )
377 + 0.0000107 * cos( l1
- 2.*l3
+p3
)
378 - 0.0000102 * cos( l2
- p1
)
379 - 0.0000091 * cos( 2.*( l1
- l3
) ) );
381 R3
= 14.99240*( 1.0 +
382 - 0.0014377 * cos( l3
- p3
)
383 - 0.0007904 * cos( l3
- p4
)
384 + 0.0006342 * cos( l2
- l3
)
385 - 0.0001758 * cos( 2.*( l3
- l4
) )
386 + 0.0000294 * cos( l3
- l4
)
387 - 0.0000156 * cos( 3.*( l3
- l4
) )
388 + 0.0000155 * cos( l1
- l3
)
389 - 0.0000153 * cos( l1
- l2
)
390 + 0.0000070 * cos( 2.*l2
- 3.*l3
+p3
)
391 - 0.0000051 * cos( l3
+p3
- 2.*Pj
- 2.*Gj
) );
393 R4
= 26.36990*( 1.0 +
394 - 0.0073391 * cos( l4
- p4
)
395 + 0.0001620 * cos( l4
- p3
)
396 + 0.0000974 * cos( l3
- l4
)
397 - 0.0000541 * cos( l4
+ p4
- 2.*Pj
- 2.*Gj
)
398 - 0.0000269 * cos( 2.*( l4
- p4
) )
399 + 0.0000182 * cos( l4
- Pj
)
400 + 0.0000177 * cos( 2.*( l3
- l4
) )
401 - 0.0000167 * cos( 2.*l4
- z
- w4
)
402 + 0.0000167 * cos( z
- w4
)
403 - 0.0000155 * cos( 2.*( l4
- Pj
- Gj
) )
404 + 0.0000142 * cos( 2.*( l4
- z
) )
405 + 0.0000104 * cos( l1
- l4
)
406 + 0.0000092 * cos( l2
- l4
)
407 - 0.0000089 * cos( l4
- Pj
- Gj
)
408 - 0.0000062 * cos( l4
+p4
- 2.*Pj
- 3.*Gj
)
409 + 0.0000048 * cos( 2.*( l4
- w4
) ) );
412 //Inclination of Jupiter's rotational axis since 1900.0
413 t
= ( num
->julianDay() - 2415020.50 ) / 36525.0;
414 I
= dms( 3.120262 +0.0006*t
).radians();
416 //Precession since B1950:
417 t
= ( num
->julianDay() - 2433282.423 ) / 36525.0;
418 P
= dms( 1.3966626*t
+0.0003088*t
*t
).radians();
426 X
[0] = R1
* cos( L1
- z
) * cos( b1
);
427 X
[1] = R2
* cos( L2
- z
) * cos( b2
);
428 X
[2] = R3
* cos( L3
- z
) * cos( b3
);
429 X
[3] = R4
* cos( L4
- z
) * cos( b4
);
430 Y
[0] = R1
* sin( L1
- z
) * cos( b1
);
431 Y
[1] = R2
* sin( L2
- z
) * cos( b2
);
432 Y
[2] = R3
* sin( L3
- z
) * cos( b3
);
433 Y
[3] = R4
* sin( L4
- z
) * cos( b4
);
434 Z
[0] = R1
* sin( b1
);
435 Z
[1] = R2
* sin( b2
);
436 Z
[2] = R3
* sin( b3
);
437 Z
[3] = R4
* sin( b4
);
439 //fictional "fifth moon" used later...
440 X
[4] = 0.0; Y
[4] = 0.0; Z
[4] = 1.0;
442 T
= num
->julianCenturies();
444 oj
= dms( 100.464441 + 1.0209550*T
+ 0.00040117*T
*T
+ 0.000000569*T
*T
*T
).radians();
446 ij
= dms( 1.303270 - 0.0054966*T
+0.00000465*T
*T
- 0.000000004*T
*T
*T
).radians();
448 for ( int i
=0; i
<5; ++i
) {
450 B1
[i
] = Y
[i
] * cos( I
) - Z
[i
] * sin( I
);
451 C1
[i
] = Y
[i
] * sin( I
) + Z
[i
] * cos( I
);
453 A2
[i
] = A1
[i
] * cos( fj
) - B1
[i
] * sin( fj
);
454 B2
[i
] = A1
[i
] * sin( fj
) + B1
[i
] * cos( fj
);
458 B3
[i
] = B2
[i
] * cos( ij
) - C2
[i
] * sin( ij
);
459 C3
[i
] = B2
[i
] * sin( ij
) + C2
[i
] * cos( ij
);
461 A4
[i
] = A3
[i
] * cos( oj
) - B3
[i
] * sin( oj
);
462 B4
[i
] = A3
[i
] * sin( oj
) + B3
[i
] * cos( oj
);
465 A5
[i
] = A4
[i
] * sin( LAMBDA
) - B4
[i
] * cos( LAMBDA
);
466 B5
[i
] = A4
[i
] * cos( LAMBDA
) + B4
[i
] * sin( LAMBDA
);
470 B6
[i
] = C5
[i
] * sin( ALPHA
) + B5
[i
] * cos( ALPHA
);
471 C6
[i
] = C5
[i
] * cos( ALPHA
) - B5
[i
] * sin( ALPHA
);
474 kdDebug() <<"A: "<<i<<": "<<A1[i]<<": "<<A2[i]<<": "<<A3[i]<<": "<<A4[i]<<": "<<A5[i]<<": "<<A6[i]<<endl;
475 kdDebug() <<"B: "<<i<<": "<<B1[i]<<": "<<B2[i]<<": "<<B3[i]<<": "<<B4[i]<<": "<<B5[i]<<": "<<B6[i]<<endl;
476 kdDebug() <<"C: "<<i<<": "<<C1[i]<<": "<<C2[i]<<": "<<C3[i]<<": "<<C4[i]<<": "<<C5[i]<<": "<<C6[i]<<endl;
480 D
= atan( A6
[4] / C6
[4] );
481 if ( C6
[4] < 0.0 ) D
+= dms::PI
;
483 //X and Y are now the rectangular coordinates of each satellite,
484 //in units of Jupiter's Equatorial radius.
485 //When Z is negative, the planet is nearer to the Sun than Jupiter.
487 //For now, take a constant mean value for Jupiter's angular size (40 arcsec = 0.011 degrees).
488 pa
= Jupiter
->pa()*dms::PI
/180.0;
490 for ( int i
=0; i
<4; ++i
) {
491 XJ
[i
] = A6
[i
] * cos( D
) - C6
[i
] * sin( D
);
492 YJ
[i
] = A6
[i
] * sin( D
) + C6
[i
] * cos( D
);
495 Pos
[i
].setRA( Jupiter
->ra()->Hours() - 0.011*( XJ
[i
] * cos( pa
) - YJ
[i
] * sin( pa
) )/15.0 );
496 Pos
[i
].setDec( Jupiter
->dec()->Degrees() - 0.011*( XJ
[i
] * sin( pa
) + YJ
[i
] * cos( pa
) ) );
498 if ( ZJ
[i
] < 0.0 ) InFront
[i
] = true;
499 else InFront
[i
] = false;