home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
TURBOM2
/
M2ASTRO.LBR
/
ASTROLIB.MZD
/
ASTROLIB.MOD
Wrap
Text File
|
2000-06-30
|
6KB
|
282 lines
IMPLEMENTATION MODULE AstroLib;
(* Jim Lill August, 1987 *)
FROM LongMath IMPORT Cos, Sin;
FROM LongTrig IMPORT Arccos, Arcsin, Arctan2, Tan, Rad, Deg;
CONST Epoch0 = 1980;
mwdec = 27.4D0; (* Milky Way north Galactic Pole *)
mwra = 192.25D0; (* 1950 Coordinates *)
D24 = 24.0D0;
D60 = 60.0D0;
D0 = 0.0D0;
D15 = 15.0D0;
VAR rmwdec,rmwra,oe, Result : LONGREAL;
(***************************************)
PROCEDURE DLONG(dnum:LONGREAL):LONGREAL;
(* 8/16/87 *)
BEGIN
Result:= DOUBLE(LONG(dnum));
RETURN Result
END DLONG;
PROCEDURE JD(yr,mo,day:CARDINAL; hrs:LONGREAL):LONGREAL;
(* 8/15/87 *)
VAR D, C, d : LONGREAL;
A, B : INTEGER;
BEGIN
IF mo < 3 THEN
mo:= mo + 12;
yr:= yr - 1
END;
d:= DOUBLE(day) + hrs/D24;
A:= INT(yr DIV 100);
B:= (A DIV 4) + 2 - A;
C:= DLONG(3.6525D2 * DOUBLE(yr));
D:= DLONG(30.6001D0 * (DOUBLE(mo) + 1.0D0));
Result:= D + C + d + 1.7209945D6 + DOUBLE(B);
RETURN Result
END JD;
PROCEDURE HRS(hr,min,sec:CARDINAL):LONGREAL;
(* 8/14/87 *)
VAR h,m,s : LONGREAL;
BEGIN
h:= DOUBLE(hr);
m:= DOUBLE(min);
s:= DOUBLE(sec);
Result:= h + (m/D60) + (s/(D60 * D60));
RETURN Result
END HRS;
PROCEDURE HMS(VAR hr,min,sec:CARDINAL; hrs:LONGREAL);
(* 8/14/87 *)
VAR r : LONGREAL;
BEGIN
hr:= CARD(hrs);
r:= D60 * (hrs - DOUBLE(hr));
min:= CARD(r);
r:= D60 * (r - DOUBLE(min));
sec:= CARD(r)
END HMS;
PROCEDURE ND(yr:CARDINAL; jd:LONGREAL):LONGREAL;
(* 8/16/87 *)
BEGIN
Result:= jd - JD(yr,1,0,D0);
RETURN Result
END ND;
PROCEDURE TC(yr:CARDINAL):LONGREAL;
(* 8/16/87 *)
BEGIN
Result:= (JD(yr,1,0,D0) - JD(1900,1,0,12.0D0))/36.525D3;
RETURN Result
END TC;
PROCEDURE GST(nd,tc,hrs:LONGREAL; yr:CARDINAL):LONGREAL;
(* 8/15/87 *)
CONST Ka = 6.57098D-2;
Kc = 1.002738D0;
Kd = 9.97270D-1;
VAR R,S,U : LONGREAL;
BEGIN
R:= 6.64606560D0 + (2400.0512620D0 * tc) + (0.00002581D0 * tc * tc);
U:= R - DOUBLE(24 * (yr - 1900));
Result:= (nd * Ka) - (D24 - U) + (DOUBLE(hrs) * Kc);
IF Result > D24
THEN Result:= Result - D24
END;
IF Result < D0
THEN Result:= Result + D24
END;
RETURN Result
END GST;
PROCEDURE LST(gst, long:LONGREAL):LONGREAL;
(* 8/15/87 *)
BEGIN
long:= long / D15; (* offset in hours *)
Result:= gst - DOUBLE(long); (* W long only *)
IF Result > D24
THEN Result:= Result - D24
END;
IF Result < D0
THEN Result:= Result + D24
END;
RETURN Result
END LST;
PROCEDURE LHA(ra,lst:LONGREAL):LONGREAL;
(* 8/15/87 *)
BEGIN
Result:= lst - ra;
IF Result < D0
THEN Result:= Result + D24
END;
RETURN Result
END LHA;
PROCEDURE RA(lha,lst:LONGREAL):LONGREAL;
(* 8/16/87 *)
BEGIN
Result:= lst - lha;
IF Result < D0
THEN Result:= Result + D24
END;
RETURN Result
END RA;
PROCEDURE OE(tc:LONGREAL):LONGREAL;
(* 8/16/87 *)
BEGIN
Result:= 46.845D0 + (0.0059D0 * tc * tc) - (0.00181D0 * tc * tc * tc);
Result:= Result / 3.6D3;
Result:= Rad(23.452294D0 - Result);
RETURN Result
END OE;
PROCEDURE Equ2Hor(lha,dec,lat:LONGREAL; VAR az,alt:LONGREAL);
(* 8/16/87 *)
VAR Ap, H, ca, sa : LONGREAL;
BEGIN
H:= Rad(lha * D15);
dec:= Rad(dec);
lat:= Rad(lat);
sa:= (Sin(dec) * Sin(lat)) + (Cos(dec) * Cos(lat) * Cos(H));
alt:= Arcsin(sa);
ca:= (Sin(dec) - (Sin(lat) * Sin(alt))) / (Cos(lat) * Cos(alt));
Ap:= Deg(Arccos(ca));
IF Sin(H) < D0 THEN
az:= Ap
ELSE
az:= 360.0D0 - Ap
END;
alt:= Deg(alt)
END Equ2Hor;
PROCEDURE Hor2Equ(az,alt,lat:LONGREAL; VAR lha,dec:LONGREAL);
(* 8/16/87
This is the opposite of Equ2Hor literally! *)
VAR l1, d1 : LONGREAL;
BEGIN
az:= az / D15;
Equ2Hor(az,alt,lat,l1,d1);
lha:= l1 / D15; (* convert to hours *)
dec:= d1
END Hor2Equ;
PROCEDURE Ecl2Equ(elong,elat:LONGREAL; VAR ra,dec:LONGREAL);
(* 8/16/87 *)
VAR sd, x, y : LONGREAL;
BEGIN
elong:= Rad(elong);
elat:= Rad(elat);
sd:= (Sin(elat) * Cos(oe)) + (Cos(elat) * Sin(oe) * Sin(elong));
dec:= Deg(Arcsin(sd));
y:= (Sin(elong) * Cos(oe)) - (Tan(elat) * Sin(oe));
x:= Cos(elong);
ra:= Arctan2(x,y);
ra:= Deg(ra) / D15
END Ecl2Equ;
PROCEDURE Equ2Ecl(ra,dec:LONGREAL; VAR elong,elat:LONGREAL);
(* 8/16/87 *)
VAR sb, x, y : LONGREAL;
BEGIN
dec:= Rad(dec);
ra:= Rad(ra * D15);
sb:= (Sin(dec) * Cos(oe)) - (Cos(dec) * Sin(oe) * Sin(ra));
WRITELN("sb= ",sb);
elat:= Deg(Arcsin(sb));
y:= (Sin(ra) * Cos(oe)) + (Tan(dec) * Sin(oe));
x:= Cos(ra);
elong:=Deg(Arctan2(x,y))
END Equ2Ecl;
PROCEDURE Equ2Gal(ra,dec:LONGREAL; VAR l,b:LONGREAL);
(* 8/18/87 *)
VAR sb,x,y : LONGREAL;
BEGIN
dec:= Rad(dec);
ra:= Rad(ra * D15);
sb:= (Cos(dec) * Cos(rmwdec) * Cos(ra - rmwra)) +
(Sin(dec) * Sin(rmwdec));
b:= Arcsin(sb);
y:= Sin(dec) - (Sin(b) * Sin(rmwdec));
x:= Cos(dec) * Sin(ra - rmwra) * Cos(rmwdec);
l:= Arctan2(x,y);
b:= Deg(b);
l:= Deg(l) + 33.0D0
END Equ2Gal;
PROCEDURE Gal2Equ(l,b:LONGREAL; VAR ra,dec:LONGREAL);
(* 8/17/87 *)
VAR sd,x,y : LONGREAL;
BEGIN
l:= Rad(l - 33.0D0);
b:= Rad(b);
sd:= (Cos(b) * Cos(rmwdec) * Sin(l)) + (Sin(b) * Sin(rmwdec));
dec:= Deg(Arcsin(sd));
y:= Cos(b) * Cos(l);
x:= (Sin(b) * Cos(rmwdec)) - (Cos(b) * Sin(rmwdec) * Sin(l));
ra:= (Deg(Arctan2(x,y) + rmwra)) / D15
END Gal2Equ;
BEGIN (* Initialization *)
JD0:= JD(Epoch0,0,0,D0);
oe:= OE(TC(Epoch0)); (*obliquity of the ecliptic, Epoch0 *)
rmwdec:= Rad(mwdec);
rmwra:= Rad(mwra);
END AstroLib.