|
|
1.1 ! root 1: #include "sky.h" ! 2: ! 3: extern struct marst ! 4: { ! 5: float f[2]; ! 6: char c[3]; ! 7: } marst[]; ! 8: ! 9: mars() ! 10: { ! 11: double pturbl, pturbb, pturbr; ! 12: double lograd; ! 13: double dele, enom, vnom, nd, sl; ! 14: double q0, v0, t0, m0, j0 , s0, u0; ! 15: double lsun, elong, ci, dlong; ! 16: double planp[8]; ! 17: struct marst *pp = &marst[0]; ! 18: double olong; ! 19: double temp; ! 20: ! 21: /* ! 22: * The arguments nnd coefficients are taken from ! 23: * Simon Newcomb, Tables of the Heliocentric Motion ! 24: * of Mars ! 25: * A.P.A.E. VI, part 4 (1895). ! 26: * ! 27: * Here are the mean orbital elements. ! 28: */ ! 29: ! 30: object = "Mars "; ! 31: ecc = .09331290 + .000092064*capt - 0.077e-6*capt2; ! 32: incl = 1.850333 - 6.75e-4*capt + 12.61e-6*capt2; ! 33: node = 48.786442 + .770992*capt - 1.39e-6*capt2 ! 34: - 5.33e-6*capt3; ! 35: argp = 334.218203 + 1.840758*capt + 1.299e-4*capt2 ! 36: - 1.19e-6*capt3; ! 37: mrad = 1.52368840; ! 38: anom = 319.529425 + .5240207666*eday + 1.808e-4*capt2 ! 39: + 1.19e-6*capt3; ! 40: motion = 0.5240711638; ! 41: ! 42: incl *= radian; ! 43: node *= radian; ! 44: argp *= radian; ! 45: anom = fmod(anom, 360.)*radian; ! 46: motion *= radian; ! 47: ! 48: /* ! 49: * Conventional mean anomalies of perturbing planets. ! 50: */ ! 51: ! 52: q0 = 102.28 + 4.092334429*eday; ! 53: v0 = 212.388 + 1.60211831*eday; ! 54: t0 = 358.415 + .98559696*eday; ! 55: m0 = 319.530 + .52402078*eday; ! 56: j0 = 225.209 + .08307904*eday + 0.332*sin((134.4+38.5*capt)*radian); ! 57: s0 = 175.533 + .03344747*eday - 0.808*sin((134.4+38.5*capt)*radian); ! 58: u0 = 74.188 + 0.0117193*eday; ! 59: ! 60: q0 *= radian; ! 61: v0 *= radian; ! 62: t0 *= radian; ! 63: m0 *= radian; ! 64: j0 *= radian; ! 65: s0 *= radian; ! 66: u0 *= radian; ! 67: ! 68: planp[1] = q0; ! 69: planp[2] = v0; ! 70: planp[3] = t0; ! 71: planp[4] = m0; ! 72: planp[5] = j0; ! 73: planp[6] = s0; ! 74: planp[7] = u0; ! 75: ! 76: /* ! 77: * Computation of long period terms affecting the mean anomaly. ! 78: * 4*mars - 7*earth + 3*venus ! 79: * 3*jupiter - 8*mars + 4*earth ! 80: * 2*jupiter - - 6*mars + 3*earth ! 81: * 2*saturn - 2*mars + earth ! 82: * jupiter - 2*mars + earth ! 83: * 5*saturn - 2*jupiter ! 84: */ ! 85: ! 86: anom = anom ! 87: - (37.05 + 13.50*capt)*radsec ! 88: + 0.606*radsec*sin((212.87+119.051*capt)*radian) ! 89: + 52.490*radsec*sin((47.48+19.771*capt)*radian) ! 90: + 0.319*radsec*sin((116.88+773.444*capt)*radian) ! 91: + 0.130*radsec*sin((74.00+163.00*capt)*radian) ! 92: + 0.009*radsec*sin((325.00+753.67*capt)*radian) ! 93: + 0.280*radsec*sin((300.00+40.8*capt)*radian); ! 94: ! 95: /* ! 96: * Computation of elliptic orbit. ! 97: */ ! 98: ! 99: enom = anom + ecc*sin(anom); ! 100: do { ! 101: dele = (anom - enom + ecc * sin(enom)) / ! 102: (1. - ecc*cos(enom)); ! 103: enom += dele; ! 104: } while(fabs(dele) > 1.e-8); ! 105: vnom = 2.*atan2(sqrt((1.+ecc)/(1.-ecc))*sin(enom/2.), ! 106: cos(enom/2.)); ! 107: rad = mrad*(1. - ecc*cos(enom)); ! 108: ! 109: /* ! 110: * Perturbations in longitude. ! 111: */ ! 112: ! 113: pturbl = 0.043*sin(2.*anom); ! 114: for(;;){ ! 115: if(pp->f[0]==0.){ ! 116: pp++; ! 117: break; ! 118: } ! 119: pturbl += pp->f[0]*cos(pp->f[1] + pp->c[0]*m0 + pp->c[1]*planp[pp->c[2]]); ! 120: pp++; ! 121: } ! 122: ! 123: /* ! 124: * Perturbations in latitude. ! 125: */ ! 126: ! 127: pturbb = 0.; ! 128: for(;;){ ! 129: if(pp->f[0]==0.){ ! 130: pp++; ! 131: break; ! 132: } ! 133: pturbb += pp->f[0]*cos(pp->f[1] + pp->c[0]*m0 + pp->c[1]*planp[pp->c[2]]); ! 134: pp++; ! 135: } ! 136: ! 137: /* ! 138: * Perturbations in log radius vector. ! 139: */ ! 140: ! 141: pturbr = 0.; ! 142: for(;;){ ! 143: if(pp->f[0]==0.){ ! 144: pp++; ! 145: break; ! 146: } ! 147: pturbr += pp->f[0]*cos(pp->f[1] + pp->c[0]*m0 + pp->c[1]*planp[pp->c[2]]); ! 148: pp++; ! 149: } ! 150: pturbr *= 1.e-6; ! 151: ! 152: /* ! 153: * reduce to the ecliptic ! 154: */ ! 155: ! 156: olong = vnom + argp + pturbl*radsec; ! 157: nd = olong - node; ! 158: lambda = node + atan2(sin(nd)*cos(incl), cos(nd)); ! 159: ! 160: sl = sin(incl)*sin(nd); ! 161: beta = atan2(sl, sqrt(1.-sl*sl)) + pturbb*radsec; ! 162: ! 163: lograd = pturbr*2.30258509; ! 164: rad *= 1. + lograd; ! 165: ! 166: /* ! 167: * Compute motion for planetary aberration. ! 168: */ ! 169: ! 170: temp = motion*mrad*mrad*sqrt(1.-ecc*ecc)/(rad*rad); ! 171: ldot = temp*sin(2.*(lambda-node))/sin(2.*(olong-node)); ! 172: bdot = temp*sin(incl)*cos(lambda-node); ! 173: rdot = motion*mrad*ecc*sin(olong-argp)/sqrt(1.-ecc*ecc); ! 174: ! 175: /* ! 176: * Compute magnitude. ! 177: */ ! 178: ! 179: lsun = 99.696678 + 0.9856473354*eday; ! 180: lsun *= radian; ! 181: elong = lambda - lsun; ! 182: ci = (rad - cos(elong))/sqrt(1. + rad*rad - 2.*rad*cos(elong)); ! 183: dlong = atan2(sqrt(1.-ci*ci), ci)/radian; ! 184: mag = -1.30 + .01486*dlong; ! 185: ! 186: semi = 4.68; ! 187: ! 188: helio(); ! 189: geo(); ! 190: ! 191: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.