|
|
1.1 ! root 1: #include "sky.h" ! 2: ! 3: extern struct suntab ! 4: { ! 5: float f[2]; ! 6: char c[3]; ! 7: } suntab[]; ! 8: /* ! 9: * WARNING: Requires sign extension of characters. ! 10: */ ! 11: ! 12: sun() ! 13: { ! 14: double mmerc, mven, merth, mmars, mjup, msat; ! 15: double dmoon, mmoon, gmoon; ! 16: double pturbb, pturbl, pturbr, lograd; ! 17: double planp[7]; ! 18: struct suntab *pp; ! 19: double Eday, capT, capT2, capT3; ! 20: pp = &suntab[0]; ! 21: Eday = eday - 36525.; ! 22: capT = Eday/36525.; ! 23: capT2 = capT*capT; ! 24: capT3 = capT2*capT; ! 25: ! 26: /* ! 27: * The arugments and coefficients are taken from ! 28: * Simon Newcomb, "Tables of the Motion of the Earth upon ! 29: * its Axis and About the Sun", A.P.A.E. VI (1895) ! 30: */ ! 31: ! 32: object = "sun "; ! 33: incl = 0.; ! 34: ecc = .01670911 - 4.205e-5 * capT - 1.26e-7*capT2; ! 35: node = 0.; ! 36: argp = 282.938352 + .0000470774*Eday + .000462*capT2 ! 37: + .000003*capT3; ! 38: mrad = 1.0; ! 39: anom = 357.527723 + .985600283*Eday - .000159*capT2 ! 40: - .000003*capT3; ! 41: motion = .9856473354; ! 42: ! 43: argp -= 0.00085; /*empirical*/ ! 44: anom += 0.00085; /*empirical*/ ! 45: ! 46: dmoon = 350.737681+12.1907491914*eday-.001436*capt2; ! 47: gmoon = 11.250889 + 13.2293504490*eday - .003212*capt2; ! 48: mmoon = 296.104608 + 13.0649924465*eday + 9.192e-3*capt2; ! 49: mmerc = 102.19 + 4.092329959*eday + .19; ! 50: mven = 212.448 + 1.602121635*eday + .17; ! 51: merth = 358.476 + 0.985600267*eday + .19; ! 52: mmars = 319.590 + .524024095*eday + .11; ! 53: mjup = 225.269 + .083082362*eday + .34; ! 54: msat = 175.593 + .033450794*eday + .24; ! 55: /* muran = 72.248 + .011722663*eday + .19;*/ ! 56: ! 57: dmoon = fmod(dmoon, 360.)*radian; ! 58: gmoon = fmod(gmoon, 360.)*radian; ! 59: mmoon = fmod(mmoon, 360.)*radian; ! 60: mmerc *= radian; ! 61: mven *= radian; ! 62: merth *= radian; ! 63: mmars *= radian; ! 64: mjup *= radian; ! 65: msat *= radian; ! 66: ! 67: ! 68: /* ! 69: long period terms in the mean anomaly - the arguments ! 70: of the terms are: ! 71: 4*mars - 7*earth + 3*venus ! 72: 3*jup - 8*mars + 4*earth ! 73: 13*earth - 8*venus ! 74: 8*earth - 15*mars ! 75: */ ! 76: ! 77: anom = anom ! 78: + 0.266/3600.*sin((31.8 + 119.0*capt)*radian) ! 79: + 6.40 /3600.*sin((231.19 + 20.20*capt)*radian) ! 80: + 1.870/3600.*sin((57.24+150.27*capt)*radian); ! 81: ! 82: incl *= radian; ! 83: node *= radian; ! 84: argp *= radian; ! 85: anom = fmod(anom, 360.)*radian; ! 86: ! 87: /* ! 88: * computation of elliptic orbit ! 89: */ ! 90: ! 91: lambda = anom + argp; ! 92: ! 93: pturbl = (2.*ecc - ecc*ecc*ecc/4.)*sin(anom) ! 94: + (ecc*ecc*5./4. - ecc*ecc*ecc*ecc*11./24.)*sin(2.*anom) ! 95: + (ecc*ecc*ecc*13./12.)*sin(3.*anom) ! 96: + (ecc*ecc*ecc*ecc*103./96.)*sin(4.*anom); ! 97: ! 98: pturbl -= 0.27*radsec*sin(anom); ! 99: ! 100: lambda += pturbl; ! 101: ! 102: beta = 0.; ! 103: ! 104: lograd = (ecc*ecc/4. + ecc*ecc*ecc*ecc/32.) ! 105: + (-ecc + ecc*ecc*ecc*3./8.)*cos(anom) ! 106: + (-ecc*ecc*3./4. + ecc*ecc*ecc*ecc*11./24.)*cos(2.*anom) ! 107: + (-ecc*ecc*ecc*17./24.)*cos(3.*anom) ! 108: + (-ecc*ecc*ecc*ecc*71./96.)*cos(4.*anom); ! 109: ! 110: lograd += 0.00000035; /*empirical*/ ! 111: lograd += 0.00000070*cos(anom); /*empirical*/ ! 112: ! 113: lograd = lograd/2.30258509; ! 114: ! 115: /* ! 116: * Computation of perturbations to elliptic orbit. ! 117: */ ! 118: ! 119: planp[1] = mmerc; ! 120: planp[2] = mven; ! 121: planp[3] = merth; ! 122: planp[4] = mmars; ! 123: planp[5] = mjup; ! 124: planp[6] = msat; ! 125: ! 126: pturbl = 0.; ! 127: for(;;){ ! 128: if(pp->f[0]==0.){ ! 129: pp++; ! 130: break; ! 131: } ! 132: pturbl += pp->f[0]*cos(pp->f[1] + pp->c[0]*merth + pp->c[1]*planp[pp->c[2]]); ! 133: pp++; ! 134: } ! 135: ! 136: pturbl = pturbl ! 137: + 6.454*sin(dmoon) ! 138: + 0.015*sin(dmoon) /* empirical */ ! 139: + 0.013*sin(3.*dmoon) ! 140: + 0.177*sin(dmoon + mmoon) ! 141: - 0.424*sin(dmoon - mmoon) ! 142: + 0.039*sin(3.*dmoon - mmoon) ! 143: - 0.064*sin(dmoon + merth) ! 144: + 0.172*sin(dmoon - merth) ! 145: /* ! 146: - 0.013*sin(dmoon-mmoon-merth) ! 147: - 0.013*sin(2.*gmoon-2.*dmoon) ! 148: */ ! 149: ; ! 150: ! 151: pturbl *= radsec; ! 152: ! 153: ! 154: pturbb = 0.; ! 155: for(;;){ ! 156: if(pp->f[0]==0.){ ! 157: pp++; ! 158: break; ! 159: } ! 160: pturbb += pp->f[0]*cos(pp->f[1] + pp->c[0]*merth + pp->c[1]*planp[pp->c[2]]); ! 161: pp++; ! 162: } ! 163: ! 164: ! 165: pturbb = pturbb ! 166: + 0.576*sin(gmoon) ! 167: + 0.016*sin(gmoon + mmoon) ! 168: - 0.047*sin(gmoon - mmoon) ! 169: + 0.021*sin(2.*dmoon - gmoon) ! 170: /* ! 171: + 0.005*sin(2.*dmoon-gmoon-mmoon) ! 172: + 0.005*sin(gmoon+merth) ! 173: + 0.005*sin(gmoon-merth) ! 174: */ ! 175: ; ! 176: ! 177: pturbb *= radsec; ! 178: ! 179: ! 180: pturbr = 0.; ! 181: for(;;){ ! 182: if(pp->f[0]==0.){ ! 183: pp++; ! 184: break; ! 185: } ! 186: pturbr += pp->f[0]*cos(pp->f[1] + pp->c[0]*merth + pp->c[1]*planp[pp->c[2]]); ! 187: pp++; ! 188: } ! 189: ! 190: ! 191: pturbr = pturbr ! 192: +13.360e-6*cos(dmoon) ! 193: + 0.030e-6*cos(3.*dmoon) ! 194: + 0.370e-6*cos(dmoon + mmoon) ! 195: - 1.330e-6*cos(dmoon - mmoon) ! 196: + 0.080e-6*cos(3.*dmoon - mmoon) ! 197: - 0.140e-6*cos(dmoon + merth) ! 198: + 0.360e-6*cos(dmoon - merth) ! 199: /* ! 200: - 0.030e-6*cos(dmoon-mmoon-merth) ! 201: + 0.030e-6*cos(2.*gmoon-2.*dmoon) ! 202: */ ! 203: ; ! 204: lambda += pturbl; ! 205: if(lambda > 2.*pi) ! 206: lambda -= 2.*pi; ! 207: ! 208: beta += pturbb; ! 209: ! 210: lograd = (lograd+pturbr) * 2.30258509; ! 211: rad = 1. + lograd * (1. + lograd * (.5 + lograd/6.)); ! 212: ! 213: motion *= radian*mrad*mrad/(rad*rad); ! 214: ! 215: semi = 961.182; ! 216: if(flags & OCCULT) ! 217: semi = 959.63; ! 218: mag = -26.5; ! 219: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.