diff options
author | wkj <devnull@localhost> | 2004-04-21 02:16:43 +0000 |
---|---|---|
committer | wkj <devnull@localhost> | 2004-04-21 02:16:43 +0000 |
commit | cd5bae7871bc0f0bc68b4d2a84703929a7a3c9d1 (patch) | |
tree | 336db54785d2b77113a6e570574be715c7eb7d1d /src/cmd/astro/comet.c | |
parent | 95f57b01e21feb457e79eaf52d593422c318024f (diff) | |
download | plan9port-cd5bae7871bc0f0bc68b4d2a84703929a7a3c9d1.tar.gz plan9port-cd5bae7871bc0f0bc68b4d2a84703929a7a3c9d1.tar.bz2 plan9port-cd5bae7871bc0f0bc68b4d2a84703929a7a3c9d1.zip |
Astro with some minor changes to placate Unix.
Diffstat (limited to 'src/cmd/astro/comet.c')
-rw-r--r-- | src/cmd/astro/comet.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/cmd/astro/comet.c b/src/cmd/astro/comet.c new file mode 100644 index 00000000..bfd11dc0 --- /dev/null +++ b/src/cmd/astro/comet.c @@ -0,0 +1,132 @@ +#include "astro.h" + +#define MAXE (.999) /* cant do hyperbolas */ + +void +comet(void) +{ + double pturbl, pturbb, pturbr; + double lograd; + double dele, enom, vnom, nd, sl; + + struct elem + { + double t; /* time of perihelion */ + double q; /* perihelion distance */ + double e; /* eccentricity */ + double i; /* inclination */ + double w; /* argument of perihelion */ + double o; /* longitude of ascending node */ + } elem; + +/* elem = (struct elem) + { + etdate(1990, 5, 19.293), + 0.9362731, + 0.6940149, + 11.41096, + 198.77059, + 69.27130, + }; /* p/schwassmann-wachmann 3, 1989d */ +/* elem = (struct elem) + { + etdate(1990, 4, 9.9761), + 0.349957, + 1.00038, + 58.9596, + 61.5546, + 75.2132, + }; /* austin 3, 1989c */ +/* elem = (struct elem) + { + etdate(1990, 10, 24.36), + 0.9385, + 1.00038, + 131.62, + 242.58, + 138.57, + }; /* levy 6 , 1990c */ +/* elem=(struct elem) + { + etdate(1996, 5, 1.3965), + 0.230035, + 0.999662, + 124.9098, + 130.2102, + 188.0430, + }; /* C/1996 B2 (Hyakutake) */ +/* elem=(struct elem) + { + etdate(1997, 4, 1.13413), + 0.9141047, + 0.9950989, + 89.42932, + 130.59066, + 282.47069, + }; /*C/1995 O1 (Hale-Bopp) */ +/* elem=(struct elem) + { + etdate(2000, 7, 26.1754), + 0.765126, + 0.999356, + 149.3904, + 151.0510, + 83.1909, + }; /*C/1999 S4 (Linear) */ + elem=(struct elem) + { + etdate(2002, 3, 18.9784), + 0.5070601, + 0.990111, + 28.12106, + 34.6666, + 93.1206, + }; /*C/2002 C1 (Ikeya-Zhang) */ + + ecc = elem.e; + if(ecc > MAXE) + ecc = MAXE; + incl = elem.i * radian; + node = (elem.o + 0.4593) * radian; + argp = (elem.w + elem.o + 0.4066) * radian; + mrad = elem.q / (1-ecc); + motion = .01720209895 * sqrt(1/(mrad*mrad*mrad))/radian; + anom = (eday - (elem.t - 2415020)) * motion * radian; + enom = anom + ecc*sin(anom); + + do { + dele = (anom - enom + ecc * sin(enom)) / + (1 - ecc*cos(enom)); + enom += dele; + } while(fabs(dele) > converge); + + vnom = 2*atan2( + sqrt((1+ecc)/(1-ecc))*sin(enom/2), + cos(enom/2)); + rad = mrad*(1-ecc*cos(enom)); + lambda = vnom + argp; + pturbl = 0; + lambda += pturbl*radsec; + pturbb = 0; + pturbr = 0; + +/* + * reduce to the ecliptic + */ + nd = lambda - node; + lambda = node + atan2(sin(nd)*cos(incl),cos(nd)); + + sl = sin(incl)*sin(nd) + pturbb*radsec; + beta = atan2(sl, sqrt(1-sl*sl)); + + lograd = pturbr*2.30258509; + rad *= 1 + lograd; + + motion *= radian*mrad*mrad/(rad*rad); + semi = 0; + + mag = 5.47 + 6.1/2.303*log(rad); + + helio(); + geo(); +} |