• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kstars

jupitermoons.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                           jupitermoons.cpp  -  description
00003                              -------------------
00004     begin                : Fri Oct 18 2002
00005     copyright            : (C) 2002 by Jason Harris
00006     email                : kstars@30doradus.org
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #include <kdebug.h>
00019 
00020 #include "jupitermoons.h"
00021 #include "ksnumbers.h"
00022 #include "ksplanet.h"
00023 #include "kssun.h"
00024 
00025 JupiterMoons::JupiterMoons(){
00026     Name[0] = i18n( "Jupiter's moon Io", "Io" );
00027     Name[1] = i18n( "Jupiter's moon Europa", "Europa" );
00028     Name[2] = i18n( "Jupiter's moon Ganymede", "Ganymede" );
00029     Name[3] = i18n( "Jupiter's moon Callisto", "Callisto" );
00030     
00031     for ( unsigned int i=0; i<4; ++i ) {
00032         XJ[i] = 0.0;
00033         YJ[i] = 0.0;
00034         ZJ[i] = 0.0;
00035     }
00036 }
00037 
00038 JupiterMoons::~JupiterMoons(){
00039 }
00040 
00041 int JupiterMoons::moonNamed( const QString &name ) const {
00042     for ( int i=0; i<4; ++i ) {
00043         if ( Name[i] == name ) return i;
00044     }
00045     return -1;
00046 }
00047 
00048 void JupiterMoons::EquatorialToHorizontal( const dms *LST, const dms *lat ) {
00049     for ( int i=0; i<4; ++i ) 
00050         Pos[i].EquatorialToHorizontal( LST, lat );
00051 }
00052 
00053 void JupiterMoons::findPosition( const KSNumbers *num, const KSPlanet *Jupiter, const KSSun *Sun ) {
00054     double Xj, Yj, Zj, Rj;
00055     double sinJB, cosJB, sinJL, cosJL;
00056     double sinSB, cosSB, sinSL, cosSL;
00057     double D, t, tdelay, LAMBDA, ALPHA;
00058     double T, oj, fj, ij, pa, tb, I, P;
00059     
00060     //Satellite position data:
00061     //l = mean longitude; Pj = longitude of perijove; 
00062     //w = long. of the node on Jupiter's equatorial plane
00063     //G = Principal inequality in the longitude of Jupiter (whatever that means :)
00064     //fl = phase of free libration
00065     //z = longitude of node of Jupiter's equator on the ecliptic
00066     //Gj/Gs = mean anomalies of Jupiter and Saturn
00067     //Pj = Longitude of the perihelion of Jupiter
00068     double l1, l2, l3, l4, p1, p2, p3, p4, w1, w2, w3, w4, G, fl, z, Gj, Gs, Pj;
00069     
00070     //L/B = true longitude/latitude of satellites
00071     double S1, S2, S3, S4, L1, L2, L3, L4, b1, b2, b3, b4, R1, R2, R3, R4;
00072     double X[5], Y[5], Z[5];
00073     double A1[5], B1[5], C1[5];
00074     double A2[5], B2[5], C2[5];
00075     double A3[5], B3[5], C3[5];
00076     double A4[5], B4[5], C4[5];
00077     double A5[5], B5[5], C5[5];
00078     double A6[5], B6[5], C6[5];
00079     
00080     Jupiter->ecLong()->SinCos( sinJL, cosJL );
00081     Jupiter->ecLat()->SinCos( sinJB, cosJB );
00082     
00083     Sun->ecLong()->SinCos( sinSL, cosSL );
00084     Sun->ecLat()->SinCos( sinSB, cosSB );
00085     
00086     //Geocentric Rectangular coordinates of Jupiter:
00087     Xj = Jupiter->rsun() * cosJB *cosJL + Sun->rsun() * cosSL;
00088     Yj = Jupiter->rsun() * cosJB *sinJL + Sun->rsun() * sinSL;
00089     Zj = Jupiter->rsun() * sinJB;
00090     
00091     //Distance and light-travel delay time:
00092     Rj = sqrt(Xj*Xj +Yj*Yj + Zj*Zj );
00093     tdelay = 0.0057755183*Rj;
00094     
00095     LAMBDA = atan(Yj/Xj);
00096     if (Xj < 0) LAMBDA += dms::PI; //resolve atan ambiguity
00097     ALPHA = atan( Zj/sqrt( Xj*Xj + Yj*Yj ) );
00098     
00099     //days since 10 Aug 1976 0h (minus light-travel delay)
00100     t = num->julianDay() - 2443000.5 - tdelay;
00101     
00102     //Mean longitudes of the satellites:
00103     l1 = dms(106.07947 + 203.488955432*t).radians();
00104     l2 = dms(175.72938 + 101.374724550*t).radians();
00105     l3 = dms(120.55434 +  50.317609110*t).radians();
00106     l4 = dms( 84.44868 +  21.571071314*t).radians();
00107     
00108     //Longitudes of the satellites' Perijoves (point along orbit nearest to Jupiter) 
00109     p1 = dms( 58.3329 + 0.16103936*t).radians(); 
00110     p2 = dms(132.8959 + 0.04647985*t).radians();
00111     p3 = dms(187.2887 + 0.00712740*t).radians();
00112     p4 = dms(335.3418 + 0.00183998*t).radians();
00113     
00114     //Longitudes of the satellites' nodes on the equatorial plane of Jupiter
00115     w1 = dms(311.0793 - 0.13279430*t).radians();
00116     w2 = dms(100.5099 - 0.03263047*t).radians();
00117     w3 = dms(119.1688 - 0.00717704*t).radians();
00118     w4 = dms(322.5729 - 0.00175934*t).radians();
00119     
00120     //Principal inequality in the longitude of Jupiter
00121 //  G = 0.33033*sin( 163.679 + 0.0010512*t ) + 0.03439*sin( 34.486 - 0.0161731*t );
00122     //converted sin args to radians:
00123     G = dms(0.33033 * sin( 2.85674 + 0.0000183469*t ) 
00124                 + 0.03439 * sin( 0.601894 - 0.000282274*t )).radians();
00125     
00126     //phase of free libration
00127     fl = dms(191.8132 + 0.17390023*t).radians();
00128     
00129     //longitude of Jupiter's equatorial node on the ecliptic
00130     z = dms(316.5182 - 0.00000208*t).radians();
00131     
00132     //Mean anomalies of Jupiter and Saturn
00133     Gj = dms(30.23756 + 0.0830925701*t + G/dms::DegToRad).radians();
00134     Gs = dms(31.97853 + 0.0334597339*t).radians();
00135     
00136     //Longitude of perihelion of Jupiter
00137     Pj = dms(13.469942).radians();
00138 
00139     //***Periodic terms in the longitudes of the satellites
00140     S1 = 0.47259 * sin( 2.*( l1 - l2) ) 
00141             - 0.03480 * sin( p3 - p4 )
00142             - 0.01756 * sin( p1 + p3 - 2.*Pj - 2.*Gj )
00143             + 0.01080 * sin( l2 - 2.*l3 + p3 )
00144             + 0.00757 * sin( fl )
00145             + 0.00663 * sin( l2 - 2.*l3 + p4 )
00146             + 0.00453 * sin( l1 - p3 ) 
00147             + 0.00453 * sin( l2 - 2.*l3 + p2 )
00148             - 0.00354 * sin( l1 - l2 )
00149             - 0.00317 * sin( 2.*z - 2.*Pj )
00150             - 0.00269 * sin( l2 - 2.*l3 + p1 )
00151             + 0.00263 * sin( l1 - p4 )
00152             + 0.00186 * sin( l1 - p1 ) 
00153             - 0.00186 * sin( Gj )
00154             + 0.00167 * sin( p2 - p3 )
00155             + 0.00158 * sin( 4.*( l1 - l2 ) )
00156             - 0.00155 * sin( l1 - l3 )
00157             - 0.00142 * sin( z +w3 - 2.*Pj - 2.*Gj )
00158             - 0.00115 * sin( 2.*( l1 - 2.*l2 + w2 ) )
00159             + 0.00089 * sin( p2 - p4 )
00160             + 0.00084 * sin( w2 - w3 )
00161             + 0.00084 * sin( l1 +p3 - 2.*Pj -2.*Gj )
00162             + 0.00053 * sin( z - w2 );
00163             
00164     S2 = 1.06476 * sin( 2.*( l2 - l3 ) )
00165             + 0.04253 * sin( l1 - 2.*l2 + p3 )
00166             + 0.03579 * sin( l2 - p3 )
00167             + 0.02383 * sin( l1 - 2.*l2 + p4 )
00168             + 0.01977 * sin( l2 - p4 )
00169             - 0.01843 * sin( fl )
00170             + 0.01299 * sin( p3 - p4 )
00171             - 0.01142 * sin( l2 - l3 )
00172             + 0.01078 * sin( l2 - p2 )
00173             - 0.01058 * sin( Gj )
00174             + 0.00870 * sin( l2 - 2.*l3 + p2 )
00175             - 0.00775 * sin( 2.*( z - Pj) )
00176             + 0.00524 * sin( 2.*( l1 - l2 ) )
00177             - 0.00460 * sin( l1 - l3 )
00178             + 0.00450 * sin( l2 - 2.*l3 + p1 )
00179             + 0.00327 * sin( z + w3 - 2.*Pj - 2.*Gj )
00180             - 0.00296 * sin( p1 +p3 - 2.*Pj - 2.*Gj )
00181             - 0.00151 * sin( 2.*Gj )
00182             + 0.00146 * sin( z - w3 )
00183             + 0.00125 * sin( z - w4 )
00184             - 0.00117 * sin( l1 - 2.*l3 + p3 )
00185             - 0.00095 * sin( 2.*( l2 - w2 ) )
00186             + 0.00086 * sin( l1 - 2.*l2 + w2 )
00187             - 0.00086 * sin( 5.*Gs - Gj + 0.911497 )
00188             - 0.00078 * sin( l2 - l4 )
00189             - 0.00064 * sin( l1 - 2.*l3 + p4 )
00190             - 0.00063 * sin( 3.*l3 - 7.*l4 + 4.*p4 )
00191             + 0.00061 * sin( p1 - p4 )
00192             + 0.00058 * sin( 2.*( z - Pj - Gj ) )
00193             + 0.00058 * sin( w3 - w4 )
00194             + 0.00056 * sin( 2.*( l2 - l4 ) )
00195             + 0.00055 * sin( 2.*( l1 - l3 ) )
00196             + 0.00052 * sin( 3.*l3 - 7.*l4 + p3 +3.*p4 )
00197             - 0.00043 * sin( l1 - p3 )
00198             + 0.00042 * sin( p3 - p2 )
00199             + 0.00041 * sin( 5.*( l2 -l3 ) )
00200             + 0.00041 * sin( p4 - Pj )
00201             + 0.00038 * sin( l2 - p1 )
00202             + 0.00032 * sin( w2 - w3 )
00203             + 0.00032 * sin( 2.*( l3 - Gj - Pj ) )
00204             + 0.00029 * sin( p1 - p3 );
00205              
00206     S3 = 0.16477 * sin( l3 - p3 )
00207             + 0.09062 * sin( l3 - p4 )
00208             - 0.06907 * sin( l2 - l3 )
00209             + 0.03786 * sin( p3 - p4 )
00210             + 0.01844 * sin( 2.*( l3 - l4 ) )
00211             - 0.01340 * sin( Gj )
00212             + 0.00703 * sin( l2 - 2.*l3 + p3 )
00213             - 0.00670 * sin( 2.*( z - Pj ) )
00214             - 0.00540 * sin( l3 - l4 )
00215             + 0.00481 * sin( p1 +p3 - 2.*Pj - 2.*Gj )
00216             - 0.00409 * sin( l2 - 2.*l3 + p2 )
00217             + 0.00379 * sin( l2 - 2.*l3 + p4 )
00218             + 0.00235 * sin( z - w3 )
00219             + 0.00198 * sin( z - w4 )
00220             + 0.00180 * sin( fl )
00221             + 0.00129 * sin( 3.*( l3 - l4 ) )
00222             + 0.00124 * sin( l1 - l3 )
00223             - 0.00119 * sin( 5.*Gs - 2.*Gj + 0.911497 )
00224             + 0.00109 * sin( l1 - l2 )
00225             - 0.00099 * sin( 3.*l3 - 7.*l4 + 4.*p4 )
00226             + 0.00091 * sin( w3 - w4 )
00227             + 0.00081 * sin( 3.*l3 - 7.*l4 + p3 + 3.*p4 )
00228             - 0.00076 * sin( 2.*l2 - 3.*l3 + p3 )
00229             + 0.00069 * sin( p4 - Pj )
00230             - 0.00058 * sin( 2.*l3 - 3.*l4 + p4 )
00231             + 0.00057 * sin( l3 + p3 - 2.*Pj -2.*Gj )
00232             - 0.00057 * sin( l3 - 2.*l4 + p4 )
00233             - 0.00052 * sin( p2 - p3 )
00234             - 0.00052 * sin( l2 - 2.*l3 +p1 )
00235             + 0.00048 * sin( l3 - 2.*l4 +p3 )
00236             - 0.00045 * sin( 2.*l2 - 3.*l3 +p4 )
00237             - 0.00041 * sin( p2 - p4 )
00238             - 0.00038 * sin( 2.*Gj )
00239             - 0.00033 * sin( p3 - p4 + w3 - w4 )
00240             - 0.00032 * sin( 3.*l3 - 7.*l4 +2.*p3 +2.*p4 )
00241             + 0.00030 * sin( 4.*( l3 - l4 ) )
00242             - 0.00029 * sin( w3 + z - 2.*Pj - 2.*Gj )
00243             + 0.00029 * sin( l3 + p4 - 2.*Pj - 2.*Gj )
00244             + 0.00026 * sin( l3 - Pj - Gj )
00245             + 0.00024 * sin( l2 - 3.*l3 + 2.*l4 )
00246             + 0.00021 * sin( 2.*( l3 - Pj - Gj ) )
00247             - 0.00021 * sin( l3 - p2 )
00248             + 0.00017 * sin( 2.*( l3 - p2 ) );
00249               
00250     S4 = 0.84109 * sin( l4 - p4 )
00251             + 0.03429 * sin( p4 - p3 )
00252             - 0.03305 * sin( 2.*( z - Pj ) )
00253             - 0.03211 * sin( Gj )
00254             - 0.01860 * sin( l4 - p3 )
00255             + 0.01182 * sin( z - w4 )
00256             + 0.00622 * sin( l4 + p4 - 2.*Gj - 2.*Pj )
00257             + 0.00385 * sin( 2.*( l4 - p4 ) )
00258             - 0.00284 * sin( 5.*Gs - 2.*Gj + + 0.911497 )
00259             - 0.00233 * sin( 2.*( z - p4 ) )
00260             - 0.00223 * sin( l3 - l4 )
00261             - 0.00208 * sin( l4 - Pj )
00262             + 0.00177 * sin( z +w4 - 2.*p4 )
00263             + 0.00134 * sin( p4 - Pj )
00264             + 0.00125 * sin( 2.*( l4 - Gj - Pj ) )
00265             - 0.00117 * sin( 2.*Gj )
00266             - 0.00112 * sin( 2.*( l3 - l4 ) )
00267             + 0.00106 * sin( 3.*l3 - 7.*l4 + 4.*p4 )
00268             + 0.00102 * sin( l4 - Gj - Pj )
00269             + 0.00096 * sin( 2.*l4 - z - w4 )
00270             + 0.00087 * sin( 2.*( z - w4 ) )
00271             - 0.00087 * sin( 3.*l3 - 7.*l4 + p3 + 3.*p4 )
00272             + 0.00085 * sin( l3 -2.*l4 +p4 )
00273             - 0.00081 * sin( 2.*(l4 - z ) )
00274             + 0.00071 * sin( l4 + p4 - 2.*Pj - 2.*Gj )
00275             + 0.00060 * sin( l1 - l4 )
00276             - 0.00056 * sin( z - w3 )
00277             - 0.00055 * sin( l3 - 2.*l4 + p3 )
00278             + 0.00051 * sin( l2 - l4 )
00279             + 0.00042 * sin( 2.*( z - Gj - Pj ) )
00280             + 0.00039 * sin( 2.*( p4 - w4 ) )
00281             + 0.00036 * sin( z + Pj - p4 - w4 )
00282             + 0.00035 * sin( 2.*Gs - Gj + 3.28767 )
00283             - 0.00035 * sin( l4 - p4 + 2.*Pj - 2.*z )
00284             - 0.00032 * sin( l4 + p4 - 2.*Pj - Gj )
00285             + 0.00030 * sin( 3.*l3 - 7.*l4 + 2.*p3 + 2.*p4 )
00286             + 0.00030 * sin( 2.*Gs - 2.*Gj + 2.60316 )
00287             + 0.00028 * sin( l4 - p4 + 2.*z - 2.*Pj )
00288             - 0.00028 * sin( 2.*( l4 - w4 ) )
00289             - 0.00027 * sin( p3 - p4 + w3 - w4 )
00290             - 0.00026 * sin( 5.*Gs - 3.*Gj + 3.28767 )
00291             + 0.00025 * sin( w4 - w3 )
00292             - 0.00025 * sin( l2 - 3.*l3 + 2.*l4 )
00293             - 0.00023 * sin( 3.*( l3 - l4 ) )
00294             + 0.00021 * sin( 2.*l4 - 2.*Pj - 3.*Gj )
00295             - 0.00021 * sin( 2.*l3 - 3.*l4 + p4 )
00296             + 0.00019 * sin( l4 - p4 - Gj )
00297             - 0.00019 * sin( 2.*l4 - p4 +Gj )
00298             - 0.00018 * sin( l4 - p4 + Gj )
00299             - 0.00016 * sin( l4 + p3 - 2.*Pj - 2.*Gj );
00300     
00301     //Convert Longitude Sums to Radians:
00302     S1 *= dms::DegToRad;
00303     S2 *= dms::DegToRad;
00304     S3 *= dms::DegToRad;
00305     S4 *= dms::DegToRad;
00306     
00307     L1 = l1 + S1;
00308     L2 = l2 + S2;
00309     L3 = l3 + S3;
00310     L4 = l4 + S4;
00311     
00312     //Periodic terms in the latitudes of the satellites
00313     tb =  0.0006502 * sin( L1 - w1 )
00314             + 0.0001835 * sin( L1 - w2 )
00315             + 0.0000329 * sin( L1 - w3 )
00316             - 0.0000311 * sin( L1 - z  )
00317             + 0.0000093 * sin( L1 - w4 )
00318             + 0.0000075 * sin( 3.*L1 - 4.*l2 - 1.9927*S1 + w2 )
00319             + 0.0000046 * sin( L1 +z - 2.*Pj - 2.*Gj );
00320     b1 = atan( tb );
00321     
00322     tb =  0.0081275 * sin( L2 - w2 )
00323             + 0.0004512 * sin( L2 - w3 )
00324             - 0.0003286 * sin( L2 - z  )
00325             + 0.0001164 * sin( L2 - w4 )
00326             + 0.0000273 * sin( l1 -  2.*l3 + 1.0146*S2 + w2 )
00327             + 0.0000143 * sin( L2 + z - 2.*Pj - 2.*Gj )
00328             - 0.0000143 * sin( L2 - w1 )
00329             + 0.0000035 * sin( L2 - z + Gj )
00330             - 0.0000028 * sin( l1 - 2.*l3 +1.0146*S2 + w3 );
00331     b2 = atan( tb );
00332     
00333     tb =  0.0032364 * sin( L3 - w3 )
00334             - 0.0016911 * sin( L3 - z  )
00335             + 0.0006849 * sin( L3 - w4 )
00336             - 0.0002806 * sin( L3 - w2 )
00337             + 0.0000321 * sin( L3 + z - 2.*Pj - 2.*Gj )
00338             + 0.0000051 * sin( L3 - z + Gj )
00339             - 0.0000045 * sin( L3 - z - Gj )
00340             - 0.0000045 * sin( L3 + z - 2.*Pj )  
00341             + 0.0000037 * sin( L3 + z - 2.*Pj -3.*Gj )
00342             + 0.0000030 * sin( 2.*l2 - 3.*L3 + 4.03*S3 +w2 )
00343             - 0.0000021 * sin( 2.*l2 - 3.*L3 + 4.03*S3 +w3 );
00344     b3 = atan( tb );
00345     
00346     tb = -0.0076579 * sin( L4 - z )
00347             + 0.0044148 * sin( L4 - w4 )
00348             - 0.0005106 * sin( L4 - w3 )
00349             + 0.0000773 * sin( L4 + z - 2.*Pj - 2.*Gj )
00350             + 0.0000104 * sin( L4 - z + Gj )
00351             - 0.0000102 * sin( L4 - z - Gj )
00352             + 0.0000088 * sin( L4 + z - 2.*Pj - 3.*Gj )
00353             - 0.0000038 * sin( L4 + z - 2.*Pj - Gj );
00354     b4 = atan( tb );
00355     
00356     
00357     //Periodic terms in the Radius of the stellites (distance from Jupiter)
00358     R1 = 5.90730*( 1.0 +  
00359             - 0.0041339 * cos( 2.*( l1 - l2 ) )
00360             - 0.0000395 * cos( l1 - p3 )
00361             - 0.0000214 * cos( l1 - p4 )
00362             + 0.0000170 * cos( l1 - l2 )
00363             - 0.0000162 * cos( l1 - p1 )
00364             - 0.0000130 * cos( 4.*( l1 - l2 ) )
00365             + 0.0000106 * cos( l1 - l3 )
00366             - 0.0000063 * cos( l1 +p3 - 2.*Pj - 2*Gj ) );
00367             
00368     R2 = 9.39912*( 1.0 + 
00369                 0.0093847 * cos( l1 - l2 )
00370             - 0.0003114 * cos( l2 - p3 )
00371             - 0.0001738 * cos( l2 - p4 )
00372             - 0.0000941 * cos( l2 - p2 )
00373             + 0.0000553 * cos( l2 - l3 )
00374             + 0.0000523 * cos( l1 - l3 )
00375             - 0.0000290 * cos( 2.*( l1 - l2 ) )
00376             + 0.0000166 * cos( 2.*( l2 - w2 ) )
00377             + 0.0000107 * cos( l1 - 2.*l3 +p3 )
00378             - 0.0000102 * cos( l2 - p1 )
00379             - 0.0000091 * cos( 2.*( l1 - l3 ) ) );
00380             
00381     R3 = 14.99240*( 1.0 +
00382             - 0.0014377 * cos( l3 - p3 )
00383             - 0.0007904 * cos( l3 - p4 )
00384             + 0.0006342 * cos( l2 - l3 )
00385             - 0.0001758 * cos( 2.*( l3 - l4 ) )
00386             + 0.0000294 * cos( l3 - l4 )
00387             - 0.0000156 * cos( 3.*( l3 - l4 ) )
00388             + 0.0000155 * cos( l1 - l3 )
00389             - 0.0000153 * cos( l1 - l2 )
00390             + 0.0000070 * cos( 2.*l2 - 3.*l3 +p3 )
00391             - 0.0000051 * cos( l3 +p3 - 2.*Pj - 2.*Gj ) );
00392             
00393     R4 = 26.36990*( 1.0 +
00394             - 0.0073391 * cos( l4 - p4 )
00395             + 0.0001620 * cos( l4 - p3 )
00396             + 0.0000974 * cos( l3 - l4 )
00397             - 0.0000541 * cos( l4 + p4 - 2.*Pj - 2.*Gj )
00398             - 0.0000269 * cos( 2.*( l4 - p4 ) )
00399             + 0.0000182 * cos( l4 - Pj )
00400             + 0.0000177 * cos( 2.*( l3 - l4 ) )
00401             - 0.0000167 * cos( 2.*l4 - z - w4 )
00402             + 0.0000167 * cos( z - w4 )
00403             - 0.0000155 * cos( 2.*( l4 - Pj - Gj ) )
00404             + 0.0000142 * cos( 2.*( l4 - z ) )
00405             + 0.0000104 * cos( l1 - l4 )
00406             + 0.0000092 * cos( l2 - l4 )
00407             - 0.0000089 * cos( l4 - Pj - Gj )
00408             - 0.0000062 * cos( l4 +p4 - 2.*Pj - 3.*Gj )
00409             + 0.0000048 * cos( 2.*( l4 - w4 ) ) );
00410             
00411     
00412     //Inclination of Jupiter's rotational axis since 1900.0
00413     t = ( num->julianDay() - 2415020.50 ) / 36525.0;
00414     I = dms( 3.120262 +0.0006*t ).radians();
00415     
00416     //Precession since B1950:
00417     t = ( num->julianDay() - 2433282.423 ) / 36525.0;
00418     P = dms( 1.3966626*t +0.0003088*t*t ).radians();
00419     
00420     L1 += P;
00421     L2 += P;
00422     L3 += P;
00423     L4 += P;
00424     z += P;
00425     
00426     X[0] = R1 * cos( L1 - z ) * cos( b1 );
00427     X[1] = R2 * cos( L2 - z ) * cos( b2 );
00428     X[2] = R3 * cos( L3 - z ) * cos( b3 );
00429     X[3] = R4 * cos( L4 - z ) * cos( b4 );
00430     Y[0] = R1 * sin( L1 - z ) * cos( b1 );
00431     Y[1] = R2 * sin( L2 - z ) * cos( b2 );
00432     Y[2] = R3 * sin( L3 - z ) * cos( b3 );
00433     Y[3] = R4 * sin( L4 - z ) * cos( b4 );
00434     Z[0] = R1 * sin( b1 );
00435     Z[1] = R2 * sin( b2 );
00436     Z[2] = R3 * sin( b3 );
00437     Z[3] = R4 * sin( b4 );
00438     
00439     //fictional "fifth moon" used later...
00440     X[4] = 0.0;  Y[4] = 0.0;  Z[4] = 1.0;
00441     
00442     T = num->julianCenturies();
00443     
00444     oj = dms( 100.464441 + 1.0209550*T + 0.00040117*T*T + 0.000000569*T*T*T ).radians();
00445     fj = z - oj;
00446     ij = dms( 1.303270 - 0.0054966*T +0.00000465*T*T - 0.000000004*T*T*T ).radians();
00447     
00448     for ( int i=0; i<5; ++i ) {
00449         A1[i] = X[i];
00450         B1[i] = Y[i] * cos( I ) - Z[i] * sin( I );
00451         C1[i] = Y[i] * sin( I ) + Z[i] * cos( I );
00452         
00453         A2[i] = A1[i] * cos( fj ) - B1[i] * sin( fj );
00454         B2[i] = A1[i] * sin( fj ) + B1[i] * cos( fj );
00455         C2[i] = C1[i];
00456         
00457         A3[i] = A2[i];
00458         B3[i] = B2[i] * cos( ij ) - C2[i] * sin( ij );
00459         C3[i] = B2[i] * sin( ij ) + C2[i] * cos( ij );
00460         
00461         A4[i] = A3[i] * cos( oj ) - B3[i] * sin( oj );
00462         B4[i] = A3[i] * sin( oj ) + B3[i] * cos( oj );
00463         C4[i] = C3[i];
00464         
00465         A5[i] = A4[i] * sin( LAMBDA ) - B4[i] * cos( LAMBDA );
00466         B5[i] = A4[i] * cos( LAMBDA ) + B4[i] * sin( LAMBDA );
00467         C5[i] = C4[i];
00468         
00469         A6[i] = A5[i];
00470         B6[i] = C5[i] * sin( ALPHA ) + B5[i] * cos( ALPHA );
00471         C6[i] = C5[i] * cos( ALPHA ) - B5[i] * sin( ALPHA );
00472     
00473         /* DEBUG
00474         kdDebug() <<"A: "<<i<<": "<<A1[i]<<": "<<A2[i]<<": "<<A3[i]<<": "<<A4[i]<<": "<<A5[i]<<": "<<A6[i]<<endl;
00475         kdDebug() <<"B: "<<i<<": "<<B1[i]<<": "<<B2[i]<<": "<<B3[i]<<": "<<B4[i]<<": "<<B5[i]<<": "<<B6[i]<<endl;
00476         kdDebug() <<"C: "<<i<<": "<<C1[i]<<": "<<C2[i]<<": "<<C3[i]<<": "<<C4[i]<<": "<<C5[i]<<": "<<C6[i]<<endl;
00477         */
00478     }
00479     
00480     D = atan( A6[4] / C6[4] );
00481     if ( C6[4] < 0.0 ) D += dms::PI;
00482     
00483     //X and Y are now the rectangular coordinates of each satellite, 
00484     //in units of Jupiter's Equatorial radius.
00485     //When Z is negative, the planet is nearer to the Sun than Jupiter.
00486     
00487     //For now, take a constant mean value for Jupiter's angular size (40 arcsec = 0.011 degrees).
00488     pa = Jupiter->pa()*dms::PI/180.0;
00489     
00490     for ( int i=0; i<4; ++i ) {
00491         XJ[i] = A6[i] * cos( D ) - C6[i] * sin( D );
00492         YJ[i] = A6[i] * sin( D ) + C6[i] * cos( D );
00493         ZJ[i] = B6[i];
00494         
00495         Pos[i].setRA( Jupiter->ra()->Hours() - 0.011*( XJ[i] * cos( pa ) - YJ[i] * sin( pa ) )/15.0 );
00496         Pos[i].setDec( Jupiter->dec()->Degrees() - 0.011*( XJ[i] * sin( pa ) + YJ[i] * cos( pa ) ) );
00497         
00498         if ( ZJ[i] < 0.0 ) InFront[i] = true;
00499         else InFront[i] = false;
00500     }
00501 }

kstars

Skip menu "kstars"
  • Main Page
  • Modules
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • keduca
  • kstars
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal