File indexing completed on 2024-04-21 14:46:41
0001 /* 0002 SPDX-FileCopyrightText: 2002 Jason Harris <kstars@30doradus.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "jupitermoons.h" 0008 0009 #include "ksnumbers.h" 0010 #include "ksplanetbase.h" 0011 #include "kssun.h" 0012 #include "trailobject.h" 0013 0014 JupiterMoons::JupiterMoons() 0015 { 0016 //Initialize the Moon objects. The magnitude data are from the 0017 //wikipedia articles for each moon, as of Oct 2007. 0018 Moon.append(new TrailObject(SkyObject::MOON, 0.0, 0.0, 5.0, i18nc("Jupiter's moon Io", "Io"))); 0019 Moon.append(new TrailObject(SkyObject::MOON, 0.0, 0.0, 5.3, i18nc("Jupiter's moon Europa", "Europa"))); 0020 Moon.append(new TrailObject(SkyObject::MOON, 0.0, 0.0, 4.6, i18nc("Jupiter's moon Ganymede", "Ganymede"))); 0021 Moon.append(new TrailObject(SkyObject::MOON, 0.0, 0.0, 5.7, i18nc("Jupiter's moon Callisto", "Callisto"))); 0022 0023 XP = QVector<double>(4, 0.0); 0024 YP = QVector<double>(4, 0.0); 0025 ZP = QVector<double>(4, 0.0); 0026 InFront = QVector<bool>(4, false); 0027 } 0028 0029 JupiterMoons::~JupiterMoons() 0030 { 0031 } 0032 0033 void JupiterMoons::findPosition(const KSNumbers *num, const KSPlanetBase *Jupiter, const KSSun *Sun) 0034 { 0035 double Xj, Yj, Zj, Rj; 0036 double sinJB, cosJB, sinJL, cosJL; 0037 double sinSB, cosSB, sinSL, cosSL; 0038 double D, t, tdelay, LAMBDA, ALPHA; 0039 double T, oj, fj, ij, pa, tb, I, P; 0040 0041 //Satellite position data: 0042 //l = mean longitude; Pj = longitude of perijove; 0043 //w = long. of the node on Jupiter's equatorial plane 0044 //G = Principal inequality in the longitude of Jupiter (whatever that means :) 0045 //fl = phase of free libration 0046 //z = longitude of node of Jupiter's equator on the ecliptic 0047 //Gj/Gs = mean anomalies of Jupiter and Saturn 0048 //Pj = Longitude of the perihelion of Jupiter 0049 double l1, l2, l3, l4, p1, p2, p3, p4, w1, w2, w3, w4, G, fl, z, Gj, Gs, Pj; 0050 0051 //L/B = true longitude/latitude of satellites 0052 double S1, S2, S3, S4, L1, L2, L3, L4, b1, b2, b3, b4, R1, R2, R3, R4; 0053 double X[5], Y[5], Z[5]; 0054 double A1[5], B1[5], C1[5]; 0055 double A2[5], B2[5], C2[5]; 0056 double A3[5], B3[5], C3[5]; 0057 double A4[5], B4[5], C4[5]; 0058 double A5[5], B5[5], C5[5]; 0059 double A6[5], B6[5], C6[5]; 0060 0061 Jupiter->ecLong().SinCos(sinJL, cosJL); 0062 Jupiter->ecLat().SinCos(sinJB, cosJB); 0063 0064 Sun->ecLong().SinCos(sinSL, cosSL); 0065 Sun->ecLat().SinCos(sinSB, cosSB); 0066 0067 //Geocentric Rectangular coordinates of Jupiter: 0068 Xj = Jupiter->rsun() * cosJB * cosJL + Sun->rsun() * cosSL; 0069 Yj = Jupiter->rsun() * cosJB * sinJL + Sun->rsun() * sinSL; 0070 Zj = Jupiter->rsun() * sinJB; 0071 0072 //Distance and light-travel delay time: 0073 //0.0057755183 is the inverse of the speed of light, in days/AU 0074 Rj = sqrt(Xj * Xj + Yj * Yj + Zj * Zj); 0075 tdelay = 0.0057755183 * Rj; //light travel delay, in days 0076 0077 LAMBDA = atan2(Yj, Xj); 0078 ALPHA = atan2(Zj, sqrt(Xj * Xj + Yj * Yj)); 0079 0080 //days since 10 Aug 1976 0h (minus light-travel delay) 0081 t = num->julianDay() - 2443000.5 - tdelay; 0082 0083 //Mean longitudes of the satellites: 0084 l1 = dms(106.07947 + 203.488955432 * t).radians(); 0085 l2 = dms(175.72938 + 101.374724550 * t).radians(); 0086 l3 = dms(120.55434 + 50.317609110 * t).radians(); 0087 l4 = dms(84.44868 + 21.571071314 * t).radians(); 0088 0089 //Longitudes of the satellites' Perijoves (point along orbit nearest to Jupiter) 0090 p1 = dms(58.3329 + 0.16103936 * t).radians(); 0091 p2 = dms(132.8959 + 0.04647985 * t).radians(); 0092 p3 = dms(187.2887 + 0.00712740 * t).radians(); 0093 p4 = dms(335.3418 + 0.00183998 * t).radians(); 0094 0095 //Longitudes of the satellites' nodes on the equatorial plane of Jupiter 0096 w1 = dms(311.0793 - 0.13279430 * t).radians(); 0097 w2 = dms(100.5099 - 0.03263047 * t).radians(); 0098 w3 = dms(119.1688 - 0.00717704 * t).radians(); 0099 w4 = dms(322.5729 - 0.00175934 * t).radians(); 0100 0101 //Principal inequality in the longitude of Jupiter 0102 // G = 0.33033*sin( 163.679 + 0.0010512*t ) + 0.03439*sin( 34.486 - 0.0161731*t ); 0103 //converted sin args to radians: 0104 G = dms(0.33033 * sin(2.85674 + 0.0000183469 * t) + 0.03439 * sin(0.601894 - 0.000282274 * t)).radians(); 0105 0106 //phase of free libration 0107 fl = dms(191.8132 + 0.17390023 * t).radians(); 0108 0109 //longitude of Jupiter's equatorial node on the ecliptic 0110 z = dms(316.5182 - 0.00000208 * t).radians(); 0111 0112 //Mean anomalies of Jupiter and Saturn 0113 Gj = dms(30.23756 + 0.0830925701 * t + G / dms::DegToRad).radians(); 0114 Gs = dms(31.97853 + 0.0334597339 * t).radians(); 0115 0116 //Longitude of perihelion of Jupiter 0117 Pj = dms(13.469942).radians(); 0118 0119 //***Periodic terms in the longitudes of the satellites 0120 S1 = 0.47259 * sin(2. * (l1 - l2)) - 0.03480 * sin(p3 - p4) - 0.01756 * sin(p1 + p3 - 2. * Pj - 2. * Gj) + 0121 0.01080 * sin(l2 - 2. * l3 + p3) + 0.00757 * sin(fl) + 0.00663 * sin(l2 - 2. * l3 + p4) + 0122 0.00453 * sin(l1 - p3) + 0.00453 * sin(l2 - 2. * l3 + p2) - 0.00354 * sin(l1 - l2) - 0123 0.00317 * sin(2. * z - 2. * Pj) - 0.00269 * sin(l2 - 2. * l3 + p1) + 0.00263 * sin(l1 - p4) + 0124 0.00186 * sin(l1 - p1) - 0.00186 * sin(Gj) + 0.00167 * sin(p2 - p3) + 0.00158 * sin(4. * (l1 - l2)) - 0125 0.00155 * sin(l1 - l3) - 0.00142 * sin(z + w3 - 2. * Pj - 2. * Gj) - 0.00115 * sin(2. * (l1 - 2. * l2 + w2)) + 0126 0.00089 * sin(p2 - p4) + 0.00084 * sin(w2 - w3) + 0.00084 * sin(l1 + p3 - 2. * Pj - 2. * Gj) + 0127 0.00053 * sin(z - w2); 0128 0129 S2 = 1.06476 * sin(2. * (l2 - l3)) + 0.04253 * sin(l1 - 2. * l2 + p3) + 0.03579 * sin(l2 - p3) + 0130 0.02383 * sin(l1 - 2. * l2 + p4) + 0.01977 * sin(l2 - p4) - 0.01843 * sin(fl) + 0.01299 * sin(p3 - p4) - 0131 0.01142 * sin(l2 - l3) + 0.01078 * sin(l2 - p2) - 0.01058 * sin(Gj) + 0.00870 * sin(l2 - 2. * l3 + p2) - 0132 0.00775 * sin(2. * (z - Pj)) + 0.00524 * sin(2. * (l1 - l2)) - 0.00460 * sin(l1 - l3) + 0133 0.00450 * sin(l2 - 2. * l3 + p1) + 0.00327 * sin(z + w3 - 2. * Pj - 2. * Gj) - 0134 0.00296 * sin(p1 + p3 - 2. * Pj - 2. * Gj) - 0.00151 * sin(2. * Gj) + 0.00146 * sin(z - w3) + 0135 0.00125 * sin(z - w4) - 0.00117 * sin(l1 - 2. * l3 + p3) - 0.00095 * sin(2. * (l2 - w2)) + 0136 0.00086 * sin(l1 - 2. * l2 + w2) - 0.00086 * sin(5. * Gs - Gj + 0.911497) - 0.00078 * sin(l2 - l4) - 0137 0.00064 * sin(l1 - 2. * l3 + p4) - 0.00063 * sin(3. * l3 - 7. * l4 + 4. * p4) + 0.00061 * sin(p1 - p4) + 0138 0.00058 * sin(2. * (z - Pj - Gj)) + 0.00058 * sin(w3 - w4) + 0.00056 * sin(2. * (l2 - l4)) + 0139 0.00055 * sin(2. * (l1 - l3)) + 0.00052 * sin(3. * l3 - 7. * l4 + p3 + 3. * p4) - 0.00043 * sin(l1 - p3) + 0140 0.00042 * sin(p3 - p2) + 0.00041 * sin(5. * (l2 - l3)) + 0.00041 * sin(p4 - Pj) + 0.00038 * sin(l2 - p1) + 0141 0.00032 * sin(w2 - w3) + 0.00032 * sin(2. * (l3 - Gj - Pj)) + 0.00029 * sin(p1 - p3); 0142 0143 S3 = 0.16477 * sin(l3 - p3) + 0.09062 * sin(l3 - p4) - 0.06907 * sin(l2 - l3) + 0.03786 * sin(p3 - p4) + 0144 0.01844 * sin(2. * (l3 - l4)) - 0.01340 * sin(Gj) + 0.00703 * sin(l2 - 2. * l3 + p3) - 0145 0.00670 * sin(2. * (z - Pj)) - 0.00540 * sin(l3 - l4) + 0.00481 * sin(p1 + p3 - 2. * Pj - 2. * Gj) - 0146 0.00409 * sin(l2 - 2. * l3 + p2) + 0.00379 * sin(l2 - 2. * l3 + p4) + 0.00235 * sin(z - w3) + 0147 0.00198 * sin(z - w4) + 0.00180 * sin(fl) + 0.00129 * sin(3. * (l3 - l4)) + 0.00124 * sin(l1 - l3) - 0148 0.00119 * sin(5. * Gs - 2. * Gj + 0.911497) + 0.00109 * sin(l1 - l2) - 0149 0.00099 * sin(3. * l3 - 7. * l4 + 4. * p4) + 0.00091 * sin(w3 - w4) + 0150 0.00081 * sin(3. * l3 - 7. * l4 + p3 + 3. * p4) - 0.00076 * sin(2. * l2 - 3. * l3 + p3) + 0151 0.00069 * sin(p4 - Pj) - 0.00058 * sin(2. * l3 - 3. * l4 + p4) + 0.00057 * sin(l3 + p3 - 2. * Pj - 2. * Gj) - 0152 0.00057 * sin(l3 - 2. * l4 + p4) - 0.00052 * sin(p2 - p3) - 0.00052 * sin(l2 - 2. * l3 + p1) + 0153 0.00048 * sin(l3 - 2. * l4 + p3) - 0.00045 * sin(2. * l2 - 3. * l3 + p4) - 0.00041 * sin(p2 - p4) - 0154 0.00038 * sin(2. * Gj) - 0.00033 * sin(p3 - p4 + w3 - w4) - 0155 0.00032 * sin(3. * l3 - 7. * l4 + 2. * p3 + 2. * p4) + 0.00030 * sin(4. * (l3 - l4)) - 0156 0.00029 * sin(w3 + z - 2. * Pj - 2. * Gj) + 0.00029 * sin(l3 + p4 - 2. * Pj - 2. * Gj) + 0157 0.00026 * sin(l3 - Pj - Gj) + 0.00024 * sin(l2 - 3. * l3 + 2. * l4) + 0.00021 * sin(2. * (l3 - Pj - Gj)) - 0158 0.00021 * sin(l3 - p2) + 0.00017 * sin(2. * (l3 - p2)); 0159 0160 S4 = 0.84109 * sin(l4 - p4) + 0.03429 * sin(p4 - p3) - 0.03305 * sin(2. * (z - Pj)) - 0.03211 * sin(Gj) - 0161 0.01860 * sin(l4 - p3) + 0.01182 * sin(z - w4) + 0.00622 * sin(l4 + p4 - 2. * Gj - 2. * Pj) + 0162 0.00385 * sin(2. * (l4 - p4)) - 0.00284 * sin(5. * Gs - 2. * Gj + +0.911497) - 0.00233 * sin(2. * (z - p4)) - 0163 0.00223 * sin(l3 - l4) - 0.00208 * sin(l4 - Pj) + 0.00177 * sin(z + w4 - 2. * p4) + 0.00134 * sin(p4 - Pj) + 0164 0.00125 * sin(2. * (l4 - Gj - Pj)) - 0.00117 * sin(2. * Gj) - 0.00112 * sin(2. * (l3 - l4)) + 0165 0.00106 * sin(3. * l3 - 7. * l4 + 4. * p4) + 0.00102 * sin(l4 - Gj - Pj) + 0.00096 * sin(2. * l4 - z - w4) + 0166 0.00087 * sin(2. * (z - w4)) - 0.00087 * sin(3. * l3 - 7. * l4 + p3 + 3. * p4) + 0167 0.00085 * sin(l3 - 2. * l4 + p4) - 0.00081 * sin(2. * (l4 - z)) + 0.00071 * sin(l4 + p4 - 2. * Pj - 2. * Gj) + 0168 0.00060 * sin(l1 - l4) - 0.00056 * sin(z - w3) - 0.00055 * sin(l3 - 2. * l4 + p3) + 0.00051 * sin(l2 - l4) + 0169 0.00042 * sin(2. * (z - Gj - Pj)) + 0.00039 * sin(2. * (p4 - w4)) + 0.00036 * sin(z + Pj - p4 - w4) + 0170 0.00035 * sin(2. * Gs - Gj + 3.28767) - 0.00035 * sin(l4 - p4 + 2. * Pj - 2. * z) - 0171 0.00032 * sin(l4 + p4 - 2. * Pj - Gj) + 0.00030 * sin(3. * l3 - 7. * l4 + 2. * p3 + 2. * p4) + 0172 0.00030 * sin(2. * Gs - 2. * Gj + 2.60316) + 0.00028 * sin(l4 - p4 + 2. * z - 2. * Pj) - 0173 0.00028 * sin(2. * (l4 - w4)) - 0.00027 * sin(p3 - p4 + w3 - w4) - 0.00026 * sin(5. * Gs - 3. * Gj + 3.28767) + 0174 0.00025 * sin(w4 - w3) - 0.00025 * sin(l2 - 3. * l3 + 2. * l4) - 0.00023 * sin(3. * (l3 - l4)) + 0175 0.00021 * sin(2. * l4 - 2. * Pj - 3. * Gj) - 0.00021 * sin(2. * l3 - 3. * l4 + p4) + 0176 0.00019 * sin(l4 - p4 - Gj) - 0.00019 * sin(2. * l4 - p4 + Gj) - 0.00018 * sin(l4 - p4 + Gj) - 0177 0.00016 * sin(l4 + p3 - 2. * Pj - 2. * Gj); 0178 0179 //Convert Longitude Sums to Radians: 0180 S1 *= dms::DegToRad; 0181 S2 *= dms::DegToRad; 0182 S3 *= dms::DegToRad; 0183 S4 *= dms::DegToRad; 0184 0185 L1 = l1 + S1; 0186 L2 = l2 + S2; 0187 L3 = l3 + S3; 0188 L4 = l4 + S4; 0189 0190 //Periodic terms in the latitudes of the satellites 0191 tb = 0.0006502 * sin(L1 - w1) + 0.0001835 * sin(L1 - w2) + 0.0000329 * sin(L1 - w3) - 0.0000311 * sin(L1 - z) + 0192 0.0000093 * sin(L1 - w4) + 0.0000075 * sin(3. * L1 - 4. * l2 - 1.9927 * S1 + w2) + 0193 0.0000046 * sin(L1 + z - 2. * Pj - 2. * Gj); 0194 b1 = atan(tb); 0195 0196 tb = 0.0081275 * sin(L2 - w2) + 0.0004512 * sin(L2 - w3) - 0.0003286 * sin(L2 - z) + 0.0001164 * sin(L2 - w4) + 0197 0.0000273 * sin(l1 - 2. * l3 + 1.0146 * S2 + w2) + 0.0000143 * sin(L2 + z - 2. * Pj - 2. * Gj) - 0198 0.0000143 * sin(L2 - w1) + 0.0000035 * sin(L2 - z + Gj) - 0.0000028 * sin(l1 - 2. * l3 + 1.0146 * S2 + w3); 0199 b2 = atan(tb); 0200 0201 tb = 0.0032364 * sin(L3 - w3) - 0.0016911 * sin(L3 - z) + 0.0006849 * sin(L3 - w4) - 0.0002806 * sin(L3 - w2) + 0202 0.0000321 * sin(L3 + z - 2. * Pj - 2. * Gj) + 0.0000051 * sin(L3 - z + Gj) - 0.0000045 * sin(L3 - z - Gj) - 0203 0.0000045 * sin(L3 + z - 2. * Pj) + 0.0000037 * sin(L3 + z - 2. * Pj - 3. * Gj) + 0204 0.0000030 * sin(2. * l2 - 3. * L3 + 4.03 * S3 + w2) - 0.0000021 * sin(2. * l2 - 3. * L3 + 4.03 * S3 + w3); 0205 b3 = atan(tb); 0206 0207 tb = -0.0076579 * sin(L4 - z) + 0.0044148 * sin(L4 - w4) - 0.0005106 * sin(L4 - w3) + 0208 0.0000773 * sin(L4 + z - 2. * Pj - 2. * Gj) + 0.0000104 * sin(L4 - z + Gj) - 0.0000102 * sin(L4 - z - Gj) + 0209 0.0000088 * sin(L4 + z - 2. * Pj - 3. * Gj) - 0.0000038 * sin(L4 + z - 2. * Pj - Gj); 0210 b4 = atan(tb); 0211 0212 //Periodic terms in the Radius of the stellites (distance from Jupiter) 0213 R1 = 5.90730 * (1.0 + -0.0041339 * cos(2. * (l1 - l2)) - 0.0000395 * cos(l1 - p3) - 0.0000214 * cos(l1 - p4) + 0214 0.0000170 * cos(l1 - l2) - 0.0000162 * cos(l1 - p1) - 0.0000130 * cos(4. * (l1 - l2)) + 0215 0.0000106 * cos(l1 - l3) - 0.0000063 * cos(l1 + p3 - 2. * Pj - 2 * Gj)); 0216 0217 R2 = 9.39912 * (1.0 + 0.0093847 * cos(l1 - l2) - 0.0003114 * cos(l2 - p3) - 0.0001738 * cos(l2 - p4) - 0218 0.0000941 * cos(l2 - p2) + 0.0000553 * cos(l2 - l3) + 0.0000523 * cos(l1 - l3) - 0219 0.0000290 * cos(2. * (l1 - l2)) + 0.0000166 * cos(2. * (l2 - w2)) + 0220 0.0000107 * cos(l1 - 2. * l3 + p3) - 0.0000102 * cos(l2 - p1) - 0.0000091 * cos(2. * (l1 - l3))); 0221 0222 R3 = 14.99240 * (1.0 + -0.0014377 * cos(l3 - p3) - 0.0007904 * cos(l3 - p4) + 0.0006342 * cos(l2 - l3) - 0223 0.0001758 * cos(2. * (l3 - l4)) + 0.0000294 * cos(l3 - l4) - 0.0000156 * cos(3. * (l3 - l4)) + 0224 0.0000155 * cos(l1 - l3) - 0.0000153 * cos(l1 - l2) + 0.0000070 * cos(2. * l2 - 3. * l3 + p3) - 0225 0.0000051 * cos(l3 + p3 - 2. * Pj - 2. * Gj)); 0226 0227 R4 = 26.36990 * (1.0 + -0.0073391 * cos(l4 - p4) + 0.0001620 * cos(l4 - p3) + 0.0000974 * cos(l3 - l4) - 0228 0.0000541 * cos(l4 + p4 - 2. * Pj - 2. * Gj) - 0.0000269 * cos(2. * (l4 - p4)) + 0229 0.0000182 * cos(l4 - Pj) + 0.0000177 * cos(2. * (l3 - l4)) - 0.0000167 * cos(2. * l4 - z - w4) + 0230 0.0000167 * cos(z - w4) - 0.0000155 * cos(2. * (l4 - Pj - Gj)) + 0.0000142 * cos(2. * (l4 - z)) + 0231 0.0000104 * cos(l1 - l4) + 0.0000092 * cos(l2 - l4) - 0.0000089 * cos(l4 - Pj - Gj) - 0232 0.0000062 * cos(l4 + p4 - 2. * Pj - 3. * Gj) + 0.0000048 * cos(2. * (l4 - w4))); 0233 0234 //Inclination of Jupiter's rotational axis since 1900.0 0235 t = (num->julianDay() - 2415020.50) / 36525.0; 0236 I = dms(3.120262 + 0.0006 * t).radians(); 0237 0238 //Precession since B1950: 0239 t = (num->julianDay() - 2433282.423) / 36525.0; 0240 P = dms(1.3966626 * t + 0.0003088 * t * t).radians(); 0241 0242 L1 += P; 0243 L2 += P; 0244 L3 += P; 0245 L4 += P; 0246 z += P; 0247 0248 X[0] = R1 * cos(L1 - z) * cos(b1); 0249 X[1] = R2 * cos(L2 - z) * cos(b2); 0250 X[2] = R3 * cos(L3 - z) * cos(b3); 0251 X[3] = R4 * cos(L4 - z) * cos(b4); 0252 Y[0] = R1 * sin(L1 - z) * cos(b1); 0253 Y[1] = R2 * sin(L2 - z) * cos(b2); 0254 Y[2] = R3 * sin(L3 - z) * cos(b3); 0255 Y[3] = R4 * sin(L4 - z) * cos(b4); 0256 Z[0] = R1 * sin(b1); 0257 Z[1] = R2 * sin(b2); 0258 Z[2] = R3 * sin(b3); 0259 Z[3] = R4 * sin(b4); 0260 0261 //fictional "fifth moon" used later... 0262 X[4] = 0.0; 0263 Y[4] = 0.0; 0264 Z[4] = 1.0; 0265 0266 T = num->julianCenturies(); 0267 0268 oj = dms(100.464441 + 1.0209550 * T + 0.00040117 * T * T + 0.000000569 * T * T * T).radians(); 0269 fj = z - oj; 0270 ij = dms(1.303270 - 0.0054966 * T + 0.00000465 * T * T - 0.000000004 * T * T * T).radians(); 0271 0272 for (int i = 0; i < 5; ++i) 0273 { 0274 A1[i] = X[i]; 0275 B1[i] = Y[i] * cos(I) - Z[i] * sin(I); 0276 C1[i] = Y[i] * sin(I) + Z[i] * cos(I); 0277 0278 A2[i] = A1[i] * cos(fj) - B1[i] * sin(fj); 0279 B2[i] = A1[i] * sin(fj) + B1[i] * cos(fj); 0280 C2[i] = C1[i]; 0281 0282 A3[i] = A2[i]; 0283 B3[i] = B2[i] * cos(ij) - C2[i] * sin(ij); 0284 C3[i] = B2[i] * sin(ij) + C2[i] * cos(ij); 0285 0286 A4[i] = A3[i] * cos(oj) - B3[i] * sin(oj); 0287 B4[i] = A3[i] * sin(oj) + B3[i] * cos(oj); 0288 C4[i] = C3[i]; 0289 0290 A5[i] = A4[i] * sin(LAMBDA) - B4[i] * cos(LAMBDA); 0291 B5[i] = A4[i] * cos(LAMBDA) + B4[i] * sin(LAMBDA); 0292 C5[i] = C4[i]; 0293 0294 A6[i] = A5[i]; 0295 B6[i] = C5[i] * sin(ALPHA) + B5[i] * cos(ALPHA); 0296 C6[i] = C5[i] * cos(ALPHA) - B5[i] * sin(ALPHA); 0297 0298 /* DEBUG 0299 qDebug() << Q_FUNC_INFO <<"A: "<<i<<": "<<A1[i]<<": "<<A2[i]<<": "<<A3[i]<<": "<<A4[i]<<": "<<A5[i]<<": "<<A6[i]; 0300 qDebug() << Q_FUNC_INFO <<"B: "<<i<<": "<<B1[i]<<": "<<B2[i]<<": "<<B3[i]<<": "<<B4[i]<<": "<<B5[i]<<": "<<B6[i]; 0301 qDebug() << Q_FUNC_INFO <<"C: "<<i<<": "<<C1[i]<<": "<<C2[i]<<": "<<C3[i]<<": "<<C4[i]<<": "<<C5[i]<<": "<<C6[i]; 0302 */ 0303 } 0304 0305 D = atan2(A6[4], C6[4]); 0306 0307 //X and Y are now the rectangular coordinates of each satellite, 0308 //in units of Jupiter's Equatorial radius. 0309 //When Z is negative, the planet is nearer to the Sun than Jupiter. 0310 0311 pa = Jupiter->pa() * dms::PI / 180.0; 0312 0313 for (int i = 0; i < 4; ++i) 0314 { 0315 XP[i] = A6[i] * cos(D) - C6[i] * sin(D); 0316 YP[i] = A6[i] * sin(D) + C6[i] * cos(D); 0317 ZP[i] = B6[i]; 0318 0319 Moon[i]->setRA(Jupiter->ra().Hours() - 0.011 * (XP[i] * cos(pa) - YP[i] * sin(pa)) / 15.0); 0320 Moon[i]->setDec(Jupiter->dec().Degrees() - 0.011 * (XP[i] * sin(pa) + YP[i] * cos(pa))); 0321 0322 //SkyPoint p = Moon[i]->deprecess( 0323 // num); // FIXME: Really, we should also denutate. Actually, we should also be aberrating these above, right? 0324 SkyPoint p = Moon[i]->catalogueCoord(num->julianDay()); 0325 Moon[i]->setRA0( 0326 p.ra()); // Just to be sure, in case deprecess doesn't set it already because RA0 was not NaN or something. 0327 Moon[i]->setDec0(p.dec()); 0328 0329 if (ZP[i] < 0.0) 0330 InFront[i] = true; 0331 else 0332 InFront[i] = false; 0333 0334 //Update Trails 0335 if (Moon[i]->hasTrail()) 0336 { 0337 Moon[i]->addToTrail(); 0338 if (Moon[i]->trail().size() > TrailObject::MaxTrail) 0339 Moon[i]->clipTrail(); 0340 } 0341 } 0342 }