Make(delphi) ver(4.04 build 185) Add(SimpleForm,2953706,14,133) { Width=916 Height=332 Caption="Вычисление эфемерид планет Автор MAV" link(onCreate,1020808:doWork2,[]) } Add(InlineCode,1777369,287,196) { WorkPoints=#9:doPLANPOS| EventPoints=#7:onRAhms|7:onDEdms|9:onPLANPOS| VarPoints=#29:PLAN=Объект солнечной системы|33:Ldeg=Гелеоцентрические координаты|33:Bdeg=Гелеоцентрические координаты|66:Rae=Растояние от планеты до Солнца в астрономических еденицах a.e.|32:RAdeg=Геоцентрические координаты|32:DEdeg=Геоцентрические координаты|69:DELTAae=Растояние от Земли до планеты в астрономических еденицах a.e.| DataPoints=#16:Coordinates_mode|5:YEAR_|6:MONTH_|4:DAY_|5:HOUR_|0:| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|17:uses Share,Debug;|6: TYPE|35: REAL3 = ARRAY[1.. 3] OF REAL;|36: REAL33 = ARRAY[1.. 3] OF REAL3;|8: CONST |18: J2000 = 0.0;|26: B1950 = -0.500002108;|0:|52: VAR DAY,MONTH,YEAR,IPLAN,IMODE,K,H,M : INTEGER;|49: HOUR,MODJD,T,TEQX : REAL;|49: X,Y,Z,XP,YP,ZP,XS,YS,ZS : REAL;|49: L,B,R,LS,BS,RS,RA,DEC,DELTA,DELTA0,S: REAL;|51: A : REAL33;|0:|6: TYPE|31: THiAsmClass = class(TDebug)|1: |9: private|49: MODE : Char;|51: MODE_Read,IPLAN_ : String;|3: |8: public|33: Coordinates_mode :THI_Event;|33: YEAR_ :THI_Event;|33: MONTH_ :THI_Event;|33: DAY_ :THI_Event;|33: HOUR_ :THI_Event;|33: onRAhms :THI_Event;|33: onDEdms :THI_Event;|33: onPLANPOS :THI_Event;|5: |53: PROCEDURE doPLANPOS(var Data:TData; index:word);|48: PROCEDURE PLAN(var Data:TData; index:word);|48: PROCEDURE Ldeg(var Data:TData; index:word);|48: PROCEDURE Bdeg(var Data:TData; index:word);|47: PROCEDURE Rae(var Data:TData; index:word);|49: PROCEDURE RAdeg(var Data:TData; index:word);|49: PROCEDURE DEdeg(var Data:TData; index:word);|51: PROCEDURE DELTAae(var Data:TData; index:word);|5: END;|0:|14:implementation|0:|75:(*-----------------------------------------------------------------------*)|75:(* SN: sine function (degrees) *)|76:(*-----------------------------------------------------------------------*) |25:FUNCTION SN(X:REAL):REAL;|32: CONST RAD=0.0174532925199433; |8: BEGIN |19: SN:=SIN(X*RAD) |6: END;|0:|75:(*-----------------------------------------------------------------------*)|75:(* CS: cosine function (degrees) *)|75:(*-----------------------------------------------------------------------*)|25:FUNCTION CS(X:REAL):REAL;|32: CONST RAD=0.0174532925199433; |8: BEGIN |19: CS:=COS(X*RAD) |6: END;|2: |75:(*-----------------------------------------------------------------------*)|75:(* ATN2: arctangent of y/x for two arguments *)|75:(* (correct quadrant; -180 deg <= ATN2 <= +180 deg) *)|75:(*-----------------------------------------------------------------------*)|29:FUNCTION ATN2(Y,X:REAL):REAL;|31: CONST RAD=0.0174532925199433;|24: VAR AX,AY,PHI: REAL;|7: BEGIN|27: IF (X=0.0) AND (Y=0.0) |20: THEN ATN2:=0.0|11: ELSE |13: BEGIN|34: AX:=ABS(X); AY:=ABS(Y); |21: IF (AX>AY) |40: THEN PHI:=ARCTAN(AY/AX)/RAD |45: ELSE PHI:=90.0-ARCTAN(AX/AY)/RAD;|41: IF (X<0.0) THEN PHI:=180.0-PHI;|36: IF (Y<0.0) THEN PHI:=-PHI;|20: ATN2:=PHI;|12: END;|6: END;|2: |75:(*-----------------------------------------------------------------------*)|75:(* PMATECL: calculates the precession matrix A[i,j] for *)|75:(* transforming ecliptic coordinates from equinox T1 to T2 *)|75:(* ( T=(JD-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|44:PROCEDURE PMATECL(T1,T2:REAL;VAR A: REAL33);|19: CONST SEC=3600.0;|25: VAR DT,PPI,PI,PA: REAL;|30: C1,S1,C2,S2,C3,S3: REAL;|7: BEGIN|14: DT:=T2-T1;|57: PPI := 174.876383889 +( ((3289.4789+0.60622*T1)*T1) +|61: ((-869.8089-0.50491*T1) + 0.03536*DT)*DT )/SEC;|48: PI := ( (47.0029-(0.06603-0.000598*T1)*T1)+|62: ((-0.03302+0.000598*T1)+0.000060*DT)*DT )*DT/SEC;|50: PA := ( (5029.0966+(2.22226-0.000042*T1)*T1)+|61: ((1.11113-0.000042*T1)-0.000006*DT)*DT )*DT/SEC;|46: C1:=CS(PPI+PA); C2:=CS(PI); C3:=CS(PPI);|46: S1:=SN(PPI+PA); S2:=SN(PI); S3:=SN(PPI);|69: A[1,1]:=+C1*C3+S1*C2*S3; A[1,2]:=+C1*S3-S1*C2*C3; A[1,3]:=-S1*S2;|69: A[2,1]:=+S1*C3-C1*C2*S3; A[2,2]:=+S1*S3+C1*C2*C3; A[2,3]:=+C1*S2;|66: A[3,1]:=+S2*S3; A[3,2]:=-S2*C3; A[3,3]:=+C2;|6: END;|2: |75:(*-----------------------------------------------------------------------*)|75:(* PRECART: calculate change of coordinates due to precession *)|75:(* for given transformation matrix A[i,j] *)|75:(* (to be used with PMATECL und PMATEQU) *)|75:(*-----------------------------------------------------------------------*)|44:PROCEDURE PRECART(A:REAL33; VAR X,Y,Z:REAL);|18: VAR U,V,W: REAL;|7: BEGIN|36: U := A[1,1]*X+A[1,2]*Y+A[1,3]*Z;|36: V := A[2,1]*X+A[2,2]*Y+A[2,3]*Z;|36: W := A[3,1]*X+A[3,2]*Y+A[3,3]*Z;|21: X:=U; Y:=V; Z:=W;|6: END;|4: |75:(*-----------------------------------------------------------------------*)|75:(* NUTEQU: transformation of mean to true coordinates *)|75:(* (including terms >0.1" according to IAU 1980) *)|75:(* T = (JD-2451545.0)/36525.0 *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE NUTEQU(T:REAL;VAR X,Y,Z:REAL);|75: CONST ARC=206264.8062; (* arcseconds per radian = 3600*180/pi *)|75: P2 =6.283185307; (* 2*pi *)|28: VAR LS,D,F,N,EPS : REAL;|28: DPSI,DEPS,C,S: REAL;|28: DX,DY,DZ : REAL;|29: FUNCTION FRAC(X:REAL):REAL;|69: (* with several compilers it may be necessary to replace TRUNC *)|69: (* by LONG_TRUNC or INT if T<-24! *)|32: BEGIN FRAC:=X-TRUNC(X) END;|7: BEGIN|75: LS := P2*FRAC(0.993133+ 99.997306*T); (* mean anomaly Sun *)|75: D := P2*FRAC(0.827362+1236.853087*T); (* diff. longitude Moon-Sun *)|75: F := P2*FRAC(0.259089+1342.227826*T); (* mean argument of latitude *)|75: N := P2*FRAC(0.347346- 5.372447*T); (* longit. ascending node *)|75: EPS := 0.4090928-2.2696E-4*T; (* obliquity of the ecliptic *)|74: DPSI := ( -17.200*SIN(N) - 1.319*SIN(2*(F-D+N)) - 0.227*SIN(2*(F+N))|55: + 0.206*SIN(2*N) + 0.143*SIN(LS) ) / ARC;|74: DEPS := ( + 9.203*COS(N) + 0.574*COS(2*(F-D+N)) + 0.098*COS(2*(F+N))|55: - 0.090*COS(2*N) ) / ARC;|44: C := DPSI*COS(EPS); S := DPSI*SIN(EPS);|61: DX := -(C*Y+S*Z); DY := (C*X-DEPS*Z); DZ := (S*X+DEPS*Y);|59: X := X + DX; Y := Y + DY; Z := Z + DZ;|6: END;|3: |75:(*-----------------------------------------------------------------------*)|75:(* ECLEQU: Conversion of ecliptic into equatorial coordinates *)|75:(* (T: equinox in Julian centuries since J2000) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE ECLEQU(T:REAL;VAR X,Y,Z:REAL);|22: VAR EPS,C,S,V: REAL;|7: BEGIN|63: EPS:=23.43929111-(46.8150+(0.00059-0.001813*T)*T)*T/3600.0;|28: C:=CS(EPS); S:=SN(EPS);|37: V:=+C*Y-S*Z; Z:=+S*Y+C*Z; Y:=V;|6: END;|2: |75:(*-----------------------------------------------------------------------*)|75:(* POLAR: conversion of cartesian coordinates (x,y,z) *)|75:(* into polar coordinates (r,theta,phi) *)|75:(* (theta in [-90 deg,+90 deg]; phi in [0 deg,+360 deg]) *)|75:(*-----------------------------------------------------------------------*)|49:PROCEDURE POLAR(X,Y,Z:REAL;VAR R,THETA,PHI:REAL);|16: VAR RHO: REAL;|7: BEGIN|38: RHO:=X*X+Y*Y; R:=SQRT(RHO+Z*Z); |49: PHI:=ATN2(Y,X); IF PHI<0 THEN PHI:=PHI+360.0;|39: RHO:=SQRT(RHO); THETA:=ATN2(Z,RHO);|6: END;|2: |75:(*-----------------------------------------------------------------------*)|75:(* DMS: conversion of degrees and fractions of a degree *)|75:(* into degrees, minutes and seconds *)|75:(*-----------------------------------------------------------------------*)|50:PROCEDURE DMS(DD:REAL;VAR D,M:INTEGER;VAR S:REAL);|15: VAR D1:REAL; |7: BEGIN|17: D:=TRUNC(DD);|16: DD:=ABS(DD);|17: D1:=frac(DD);|23: M :=TRUNC(D1*60.0);|26: S:=frac(D1*60.0)*60.0;|8: END; |51:{PROCEDURE DMS(DD:REAL;VAR D,M:INTEGER;VAR S:REAL);|15: VAR D1:REAL; |7: BEGIN|33: D1:=ABS(DD); D:=TRUNC(D1); |52: D1:=(D1-D)*60.0; M:=TRUNC(D1); S:=(D1-M)*60.0;|19: IF (DD<0) THEN |64: IF (D<>0) THEN D:=-D ELSE IF (M<>0) THEN M:=-M ELSE S:=-S;|7: END;}|4: |75:(*-----------------------------------------------------------------------*)|75:(* MJD: Modified Julian Date *)|75:(* The routine is valid for any date since 4713 BC. *)|75:(* Julian calendar is used up to 1582 October 4, *)|75:(* Gregorian calendar is used from 1582 October 15 onwards. *)|75:(*-----------------------------------------------------------------------*)|52:FUNCTION MJD(DAY,MONTH,YEAR:INTEGER;HOUR:REAL):REAL;|26: VAR A: REAL; B: INTEGER;|7: BEGIN|36: A:=10000.0*YEAR+100.0*MONTH+DAY;|63: IF (MONTH<=2) THEN BEGIN MONTH:=MONTH+12; YEAR:=YEAR-1 END;|22: IF (A<=15821004.1)|42: THEN B:=-2+TRUNC((YEAR+4716)/4)-1179|60: ELSE B:=TRUNC(YEAR/400)-TRUNC(YEAR/100)+TRUNC(YEAR/4);|27: A:=365.0*YEAR-679004.0;|52: MJD:=A+B+TRUNC(30.6001*(MONTH+1))+DAY+HOUR/24.0;|6: END;|3: |75:(*-----------------------------------------------------------------------*)|75:(* SUN200: ecliptic coordinates L,B,R (in deg and AU) of the *)|75:(* Sun referred to the mean equinox of date *)|75:(* (T: time in Julian centuries since J2000) *)|75:(* ( = (JED-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE SUN200(T:REAL;VAR L,B,R:REAL);|23: CONST P2=6.283185307;|44: VAR C3,S3: ARRAY [-1..7] OF REAL;|44: C,S: ARRAY [-8..0] OF REAL;|27: M2,M3,M4,M5,M6: REAL;|27: D,A,UU: REAL;|27: U,V,DL,DR,DB: REAL;|30: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|67: (* for some compilers TRUNC has to be replaced by LONG_TRUNC *)|67: (* or INT (Turbo-Pascal) if the routine is used with T<-24 *)|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|47: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2; END;|0:|63: PROCEDURE TERM(I1,I,IT:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|9: BEGIN|54: IF IT=0 THEN ADDTHE(C3[I1],S3[I1],C[I],S[I],U,V)|44: ELSE BEGIN U:=U*T; V:=V*T END;|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|0:|70: PROCEDURE PERTVEN; (* Keplerian terms and perturbations by Venus *)|19: VAR I: INTEGER;|9: BEGIN|60: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M2); S[-1]:=-SIN(M2);|73: FOR I:=-1 DOWNTO -5 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|62: TERM(1, 0,0,-0.22,6892.76,-16707.37, -0.54, 0.00, 0.00);|62: TERM(1, 0,1,-0.06, -17.35, 42.04, -0.15, 0.00, 0.00);|62: TERM(1, 0,2,-0.01, -0.05, 0.13, -0.02, 0.00, 0.00);|62: TERM(2, 0,0, 0.00, 71.98, -139.57, 0.00, 0.00, 0.00);|62: TERM(2, 0,1, 0.00, -0.36, 0.70, 0.00, 0.00, 0.00);|62: TERM(3, 0,0, 0.00, 1.04, -1.75, 0.00, 0.00, 0.00);|62: TERM(0,-1,0, 0.03, -0.07, -0.16, -0.07, 0.02,-0.02);|62: TERM(1,-1,0, 2.35, -4.23, -4.75, -2.64, 0.00, 0.00);|62: TERM(1,-2,0,-0.10, 0.06, 0.12, 0.20, 0.02, 0.00);|62: TERM(2,-1,0,-0.06, -0.03, 0.20, -0.01, 0.01,-0.09);|62: TERM(2,-2,0,-4.70, 2.90, 8.28, 13.42, 0.01,-0.01);|62: TERM(3,-2,0, 1.80, -1.74, -1.44, -1.57, 0.04,-0.06);|62: TERM(3,-3,0,-0.67, 0.03, 0.11, 2.43, 0.01, 0.00);|62: TERM(4,-2,0, 0.03, -0.03, 0.10, 0.09, 0.01,-0.01);|62: TERM(4,-3,0, 1.51, -0.40, -0.88, -3.36, 0.18,-0.10);|62: TERM(4,-4,0,-0.19, -0.09, -0.38, 0.77, 0.00, 0.00);|62: TERM(5,-3,0, 0.76, -0.68, 0.30, 0.37, 0.01, 0.00);|62: TERM(5,-4,0,-0.14, -0.04, -0.11, 0.43,-0.03, 0.00);|62: TERM(5,-5,0,-0.05, -0.07, -0.31, 0.21, 0.00, 0.00);|62: TERM(6,-4,0, 0.15, -0.04, -0.06, -0.21, 0.01, 0.00);|62: TERM(6,-5,0,-0.03, -0.03, -0.09, 0.09,-0.01, 0.00);|62: TERM(6,-6,0, 0.00, -0.04, -0.18, 0.02, 0.00, 0.00);|62: TERM(7,-5,0,-0.12, -0.03, -0.08, 0.31,-0.02,-0.01);|8: END;|0:|49: PROCEDURE PERTMAR; (* perturbations by Mars *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M4); S[-1]:=-SIN(M4);|73: FOR I:=-1 DOWNTO -7 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|62: TERM(1,-1,0,-0.22, 0.17, -0.21, -0.27, 0.00, 0.00);|62: TERM(1,-2,0,-1.66, 0.62, 0.16, 0.28, 0.00, 0.00);|62: TERM(2,-2,0, 1.96, 0.57, -1.32, 4.55, 0.00, 0.01);|62: TERM(2,-3,0, 0.40, 0.15, -0.17, 0.46, 0.00, 0.00);|62: TERM(2,-4,0, 0.53, 0.26, 0.09, -0.22, 0.00, 0.00);|62: TERM(3,-3,0, 0.05, 0.12, -0.35, 0.15, 0.00, 0.00);|62: TERM(3,-4,0,-0.13, -0.48, 1.06, -0.29, 0.01, 0.00);|62: TERM(3,-5,0,-0.04, -0.20, 0.20, -0.04, 0.00, 0.00);|62: TERM(4,-4,0, 0.00, -0.03, 0.10, 0.04, 0.00, 0.00);|62: TERM(4,-5,0, 0.05, -0.07, 0.20, 0.14, 0.00, 0.00);|62: TERM(4,-6,0,-0.10, 0.11, -0.23, -0.22, 0.00, 0.00);|62: TERM(5,-7,0,-0.05, 0.00, 0.01, -0.14, 0.00, 0.00);|62: TERM(5,-8,0, 0.05, 0.01, -0.02, 0.10, 0.00, 0.00);|8: END;|0:|52: PROCEDURE PERTJUP; (* perturbations by Jupiter *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M5); S[-1]:=-SIN(M5);|73: FOR I:=-1 DOWNTO -3 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|62: TERM(-1,-1,0,0.01, 0.07, 0.18, -0.02, 0.00,-0.02);|62: TERM(0,-1,0,-0.31, 2.58, 0.52, 0.34, 0.02, 0.00);|62: TERM(1,-1,0,-7.21, -0.06, 0.13,-16.27, 0.00,-0.02);|62: TERM(1,-2,0,-0.54, -1.52, 3.09, -1.12, 0.01,-0.17);|62: TERM(1,-3,0,-0.03, -0.21, 0.38, -0.06, 0.00,-0.02);|62: TERM(2,-1,0,-0.16, 0.05, -0.18, -0.31, 0.01, 0.00);|62: TERM(2,-2,0, 0.14, -2.73, 9.23, 0.48, 0.00, 0.00);|62: TERM(2,-3,0, 0.07, -0.55, 1.83, 0.25, 0.01, 0.00);|62: TERM(2,-4,0, 0.02, -0.08, 0.25, 0.06, 0.00, 0.00);|62: TERM(3,-2,0, 0.01, -0.07, 0.16, 0.04, 0.00, 0.00);|62: TERM(3,-3,0,-0.16, -0.03, 0.08, -0.64, 0.00, 0.00);|62: TERM(3,-4,0,-0.04, -0.01, 0.03, -0.17, 0.00, 0.00);|8: END;|0:|51: PROCEDURE PERTSAT; (* perturbations by Saturn *)|9: BEGIN|38: C[-1]:=COS(M6); S[-1]:=-SIN(M6);|50: ADDTHE(C[-1],S[-1],C[-1],S[-1],C[-2],S[-2]);|62: TERM(0,-1,0, 0.00, 0.32, 0.01, 0.00, 0.00, 0.00);|62: TERM(1,-1,0,-0.08, -0.41, 0.97, -0.18, 0.00,-0.01);|62: TERM(1,-2,0, 0.04, 0.10, -0.23, 0.10, 0.00, 0.00);|62: TERM(2,-2,0, 0.04, 0.10, -0.35, 0.13, 0.00, 0.00);|8: END;|0:|66: PROCEDURE PERTMOO; (* difference between the Earth-Moon *)|66: BEGIN (* barycenter and the center of the Earth *)|61: DL := DL + 6.45*SIN(D) - 0.42*SIN(D-A) + 0.18*SIN(D+A)|64: + 0.17*SIN(D-M3) - 0.06*SIN(D+M3);|60: DR := DR + 30.76*COS(D) - 3.06*COS(D-A)+ 0.85*COS(D+A)|64: - 0.58*COS(D+M3) + 0.57*COS(D-M3);|31: DB := DB + 0.576*SIN(UU);|8: END;|0:|21: BEGIN (* SUN200 *)|30: DL:=0.0; DR:=0.0; DB:=0.0;|41: M2:=P2*FRAC(0.1387306+162.5485917*T);|40: M3:=P2*FRAC(0.9931266+99.9973604*T);|41: M4:=P2*FRAC(0.0543250+ 53.1666028*T);|40: M5:=P2*FRAC(0.0551750+ 8.4293972*T);|74: M6:=P2*FRAC(0.8816500+ 3.3938722*T); D :=P2*FRAC(0.8274+1236.8531*T);|74: A :=P2*FRAC(0.3749+1325.5524*T); UU:=P2*FRAC(0.2591+1342.2278*T);|31: C3[0]:=1.0; S3[0]:=0.0;|67: C3[1]:=COS(M3); S3[1]:=SIN(M3); C3[-1]:=C3[1]; S3[-1]:=-S3[1];|69: FOR I:=2 TO 7 DO ADDTHE(C3[I-1],S3[I-1],C3[1],S3[1],C3[I],S3[I]);|48: PERTVEN; PERTMAR; PERTJUP; PERTSAT; PERTMOO;|74: DL:=DL + 6.40*SIN(P2*(0.6983+0.0561*T))+1.87*SIN(P2*(0.5764+0.4174*T))|75: + 0.27*SIN(P2*(0.4189+0.3306*T))+0.20*SIN(P2*(0.3581+2.4814*T));|72: L:= 360.0*FRAC(0.7859453 + M3/P2 + ((6191.2+1.1*T)*T+DL)/1296.0E3 );|44: R:= 1.0001398 - 0.0000007*T + DR*1E-6;|18: B:= DB/3600.0;|21: END; (* SUN200 *)|2: |75:(*-----------------------------------------------------------------------*)|75:(* MER200: Mercury; ecliptic coordinates L,B,R (in deg and AU) *)|75:(* equinox of date *)|75:(* (T: time in Julian centuries since J2000) *)|75:(* ( = (JED-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE MER200(T:REAL;VAR L,B,R:REAL);|23: CONST P2=6.283185307;|44: VAR C1,S1: ARRAY [-1..9] OF REAL;|44: C,S: ARRAY [-5..0] OF REAL;|27: M1,M2,M3,M5,M6: REAL;|27: U,V, DL,DR,DB: REAL;|30: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|42: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2;|8: END;|0:|63: PROCEDURE TERM(I1,I,IT:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|9: BEGIN|54: IF IT=0 THEN ADDTHE(C1[I1],S1[I1],C[I],S[I],U,V)|44: ELSE BEGIN U:=U*T; V:=V*T END;|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|67: PROCEDURE PERTVEN; (* Kepler terms and perturbations by Venus *)|19: VAR I: INTEGER;|9: BEGIN|61: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M2); S[-1]:=-SIN(M2);|73: FOR I:=-1 DOWNTO -4 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|71: TERM( 1, 0,0, 259.74,84547.39,-78342.34, 0.01,11683.22,21203.79);|71: TERM( 1, 0,1, 2.30, 5.04, -7.52, 0.02, 138.55, -71.01);|71: TERM( 1, 0,2, 0.01, -0.01, 0.01, 0.01, -0.19, -0.54);|71: TERM( 2, 0,0,-549.71,10394.44, -7955.45, 0.00, 2390.29, 4306.79);|71: TERM( 2, 0,1, -4.77, 8.97, -1.53, 0.00, 28.49, -14.18);|71: TERM( 2, 0,2, 0.00, 0.00, 0.00, 0.00, -0.04, -0.11);|71: TERM( 3, 0,0,-234.04, 1748.74, -1212.86, 0.00, 535.41, 984.33);|71: TERM( 3, 0,1, -2.03, 3.48, -0.35, 0.00, 6.56, -2.91);|71: TERM( 4, 0,0, -77.64, 332.63, -219.23, 0.00, 124.40, 237.03);|71: TERM( 4, 0,1, -0.70, 1.10, -0.08, 0.00, 1.59, -0.59);|71: TERM( 5, 0,0, -23.59, 67.28, -43.54, 0.00, 29.44, 58.77);|71: TERM( 5, 0,1, -0.23, 0.32, -0.02, 0.00, 0.39, -0.11);|71: TERM( 6, 0,0, -6.86, 14.06, -9.18, 0.00, 7.03, 14.84);|71: TERM( 6, 0,1, -0.07, 0.09, -0.01, 0.00, 0.10, -0.02);|71: TERM( 7, 0,0, -1.94, 2.98, -2.02, 0.00, 1.69, 3.80);|71: TERM( 8, 0,0, -0.54, 0.63, -0.46, 0.00, 0.41, 0.98);|71: TERM( 9, 0,0, -0.15, 0.13, -0.11, 0.00, 0.10, 0.25);|71: TERM(-1,-2,0, -0.17, -0.06, -0.05, 0.14, -0.06, -0.07);|71: TERM( 0,-1,0, 0.24, -0.16, -0.11,-0.16, 0.04, -0.01);|71: TERM( 0,-2,0, -0.68, -0.25, -0.26, 0.73, -0.16, -0.18);|71: TERM( 0,-5,0, 0.37, 0.08, 0.06,-0.28, 0.13, 0.12);|71: TERM( 1,-1,0, 0.58, -0.41, 0.26, 0.36, 0.01, -0.01);|71: TERM( 1,-2,0, -3.51, -1.23, 0.23,-0.63, -0.05, -0.06);|71: TERM( 1,-3,0, 0.08, 0.53, -0.11, 0.04, 0.02, -0.09);|71: TERM( 1,-5,0, 1.44, 0.31, 0.30,-1.39, 0.34, 0.29);|71: TERM( 2,-1,0, 0.15, -0.11, 0.09, 0.12, 0.02, -0.04);|71: TERM( 2,-2,0, -1.99, -0.68, 0.65,-1.91, -0.20, 0.03);|71: TERM( 2,-3,0, -0.34, -1.28, 0.97,-0.26, 0.03, 0.03);|71: TERM( 2,-4,0, -0.33, 0.35, -0.13,-0.13, -0.01, 0.00);|71: TERM( 2,-5,0, 7.19, 1.56, -0.05, 0.12, 0.06, 0.05);|71: TERM( 3,-2,0, -0.52, -0.18, 0.13,-0.39, -0.16, 0.03);|71: TERM( 3,-3,0, -0.11, -0.42, 0.36,-0.10, -0.05, -0.05);|71: TERM( 3,-4,0, -0.19, 0.22, -0.23,-0.20, -0.01, 0.02);|71: TERM( 3,-5,0, 2.77, 0.49, -0.45, 2.56, 0.40, -0.12);|71: TERM( 4,-5,0, 0.67, 0.12, -0.09, 0.47, 0.24, -0.08);|71: TERM( 5,-5,0, 0.18, 0.03, -0.02, 0.12, 0.09, -0.03);|8: END;|0:|54: PROCEDURE PERTEAR; (* perturbations by the Earth *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M3); S[-1]:=-SIN(M3);|73: FOR I:=-1 DOWNTO -3 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|71: TERM( 0,-4,0, -0.11, -0.07, -0.08, 0.11, -0.02, -0.04);|71: TERM( 1,-1,0, 0.10, -0.20, 0.15, 0.07, 0.00, 0.00);|71: TERM( 1,-2,0, -0.35, 0.28, -0.13,-0.17, -0.01, 0.00);|71: TERM( 1,-4,0, -0.67, -0.45, 0.00, 0.01, -0.01, -0.01);|71: TERM( 2,-2,0, -0.20, 0.16, -0.16,-0.20, -0.01, 0.02);|71: TERM( 2,-3,0, 0.13, -0.02, 0.02, 0.14, 0.01, 0.00);|71: TERM( 2,-4,0, -0.33, -0.18, 0.17,-0.31, -0.04, 0.00);|8: END;|0:|52: PROCEDURE PERTJUP; (* perturbations by Jupiter *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M5); S[-1]:=-SIN(M5);|73: FOR I:=-1 DOWNTO -2 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|71: TERM(-1,-1,0, -0.08, 0.16, 0.15, 0.08, -0.04, 0.01);|71: TERM(-1,-2,0, 0.10, -0.06, -0.07,-0.12, 0.07, -0.01);|71: TERM( 0,-1,0, -0.31, 0.48, -0.02, 0.13, -0.03, -0.02);|71: TERM( 0,-2,0, 0.42, -0.26, -0.38,-0.50, 0.20, -0.03);|71: TERM( 1,-1,0, -0.70, 0.01, -0.02,-0.63, 0.00, 0.03);|71: TERM( 1,-2,0, 2.61, -1.97, 1.74, 2.32, 0.01, 0.01);|71: TERM( 1,-3,0, 0.32, -0.15, 0.13, 0.28, 0.00, 0.00);|71: TERM( 2,-1,0, -0.18, 0.01, 0.00,-0.13, -0.03, 0.03);|71: TERM( 2,-2,0, 0.75, -0.56, 0.45, 0.60, 0.08, -0.17);|71: TERM( 3,-2,0, 0.20, -0.15, 0.10, 0.14, 0.04, -0.08);|8: END;|0:|51: PROCEDURE PERTSAT; (* perturbations by Saturn *)|9: BEGIN|42: C[-2]:=COS(2*M6); S[-2]:=-SIN(2*M6);|71: TERM( 1,-2,0, -0.19, 0.33, 0.00, 0.00, 0.00, 0.00);|8: END;|0:|21: BEGIN (* MER200 *)|30: DL:=0.0; DR:=0.0; DB:=0.0;|41: M1:=P2*FRAC(0.4855407+415.2014314*T);|41: M2:=P2*FRAC(0.1394222+162.5490444*T);|41: M3:=P2*FRAC(0.9937861+ 99.9978139*T);|41: M5:=P2*FRAC(0.0558417+ 8.4298417*T);|41: M6:=P2*FRAC(0.8823333+ 3.3943333*T);|31: C1[0]:=1.0; S1[0]:=0.0;|67: C1[1]:=COS(M1); S1[1]:=SIN(M1); C1[-1]:=C1[1]; S1[-1]:=-S1[1];|69: FOR I:=2 TO 9 DO ADDTHE(C1[I-1],S1[I-1],C1[1],S1[1],C1[I],S1[I]);|39: PERTVEN; PERTEAR; PERTJUP; PERTSAT;|27: DL := DL + (2.8+3.2*T);|72: L:= 360.0*FRAC(0.2151379 + M1/P2 + ((5601.7+1.1*T)*T+DL)/1296.0E3 );|46: R:= 0.3952829 + 0.0000016*T + DR*1.0E-6;|61: B:= ( -2522.15 + (-30.18 + 0.04*T) * T + DB ) / 3600.0;|21: END; (* MER200 *)|2: |75:(*-----------------------------------------------------------------------*)|75:(* VEN200: Venus; ecliptic coordinates L,B,R (in deg and AU) *)|75:(* equinox of date *)|75:(* (T: time in Julian centuries since J2000) *)|75:(* ( = (JED-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE VEN200(T:REAL;VAR L,B,R:REAL);|23: CONST P2=6.283185307;|47: VAR C2,S2: ARRAY [ 0..8] OF REAL;|47: C,S: ARRAY [-8..0] OF REAL;|30: M1,M2,M3,M4,M5,M6: REAL;|30: U,V, DL,DR,DB: REAL;|33: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|47: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2; END;|0:|63: PROCEDURE TERM(I1,I,IT:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|9: BEGIN|54: IF IT=0 THEN ADDTHE(C2[I1],S2[I1],C[I],S[I],U,V)|44: ELSE BEGIN U:=U*T; V:=V*T END;|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|0:|52: PROCEDURE PERTMER; (* perturbations by Mercury *)|9: BEGIN|60: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M1); S[-1]:=-SIN(M1);|50: ADDTHE(C[-1],S[-1],C[-1],S[-1],C[-2],S[-2]);|67: TERM(1,-1,0, 0.00, 0.00, 0.06, -0.09, 0.01, 0.00);|67: TERM(2,-1,0, 0.25, -0.09, -0.09, -0.27, 0.00, 0.00);|67: TERM(4,-2,0, -0.07, -0.08, -0.14, 0.14, -0.01, -0.01);|67: TERM(5,-2,0, -0.35, 0.08, 0.02, 0.09, 0.00, 0.00);|8: END;|0:|71: PROCEDURE PERTEAR; (* Kepler terms and perturbations by the Earth *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M3); S[-1]:=-SIN(M3);|73: FOR I:=-1 DOWNTO -7 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|67: TERM(1, 0,0, 2.37,2793.23,-4899.07, 0.11,9995.27,7027.22);|67: TERM(1, 0,1, 0.10, -19.65, 34.40, 0.22, 64.95, -86.10);|67: TERM(1, 0,2, 0.06, 0.04, -0.07, 0.11, -0.55, -0.07);|67: TERM(2, 0,0,-170.42, 73.13, -16.59, 0.00, 67.71, 47.56);|67: TERM(2, 0,1, 0.93, 2.91, 0.23, 0.00, -0.03, -0.92);|67: TERM(3, 0,0, -2.31, 0.90, -0.08, 0.00, 0.04, 2.09);|67: TERM(1,-1,0, -2.38, -4.27, 3.27, -1.82, 0.00, 0.00);|67: TERM(1,-2,0, 0.09, 0.00, -0.08, 0.05, -0.02, -0.25);|67: TERM(2,-2,0, -9.57, -5.93, 8.57,-13.83, -0.01, -0.01);|67: TERM(2,-3,0, -2.47, -2.40, 0.83, -0.95, 0.16, 0.24);|67: TERM(3,-2,0, -0.09, -0.05, 0.08, -0.13, -0.28, 0.12);|67: TERM(3,-3,0, 7.12, 0.32, -0.62, 13.76, -0.07, 0.01);|67: TERM(3,-4,0, -0.65, -0.17, 0.18, -0.73, 0.10, 0.05);|67: TERM(3,-5,0, -1.08, -0.95, -0.17, 0.22, -0.03, -0.03);|67: TERM(4,-3,0, 0.06, 0.00, -0.01, 0.08, 0.14, -0.18);|67: TERM(4,-4,0, 0.93, -0.46, 1.06, 2.13, -0.01, 0.01);|67: TERM(4,-5,0, -1.53, 0.38, -0.64, -2.54, 0.27, 0.00);|67: TERM(4,-6,0, -0.17, -0.05, 0.03, -0.11, 0.02, 0.00);|67: TERM(5,-5,0, 0.18, -0.28, 0.71, 0.47, -0.02, 0.04);|67: TERM(5,-6,0, 0.15, -0.14, 0.30, 0.31, -0.04, 0.03);|67: TERM(5,-7,0, -0.08, 0.02, -0.03, -0.11, 0.01, 0.00);|67: TERM(5,-8,0, -0.23, 0.00, 0.01, -0.04, 0.00, 0.00);|67: TERM(6,-6,0, 0.01, -0.14, 0.39, 0.04, 0.00, -0.01);|67: TERM(6,-7,0, 0.02, -0.05, 0.12, 0.04, -0.01, 0.01);|67: TERM(6,-8,0, 0.10, -0.10, 0.19, 0.19, -0.02, 0.02);|67: TERM(7,-7,0, -0.03, -0.06, 0.18, -0.08, 0.00, 0.00);|67: TERM(8,-8,0, -0.03, -0.02, 0.06, -0.08, 0.00, 0.00);|8: END;|0:|49: PROCEDURE PERTMAR; (* perturbations by Mars *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M4); S[-1]:=-SIN(M4);|73: FOR I:=-1 DOWNTO -2 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|67: TERM(1,-3,0, -0.65, 1.02, -0.04, -0.02, -0.02, 0.00);|67: TERM(2,-2,0, -0.05, 0.04, -0.09, -0.10, 0.00, 0.00);|67: TERM(2,-3,0, -0.50, 0.45, -0.79, -0.89, 0.01, 0.03);|8: END;|0:|52: PROCEDURE PERTJUP; (* perturbations by Jupiter *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M5); S[-1]:=-SIN(M5);|73: FOR I:=-1 DOWNTO -2 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|67: TERM(0,-1,0, -0.05, 1.56, 0.16, 0.04, -0.08, -0.04);|67: TERM(1,-1,0, -2.62, 1.40, -2.35, -4.40, 0.02, 0.03);|67: TERM(1,-2,0, -0.47, -0.08, 0.12, -0.76, 0.04, -0.18);|67: TERM(2,-2,0, -0.73, -0.51, 1.27, -1.82, -0.01, 0.01);|67: TERM(2,-3,0, -0.14, -0.10, 0.25, -0.34, 0.00, 0.00);|67: TERM(3,-3,0, -0.01, 0.04, -0.11, -0.02, 0.00, 0.00);|8: END;|0:|51: PROCEDURE PERTSAT; (* perturbations by Saturn *)|9: BEGIN|38: C[-1]:=COS(M6); S[-1]:=-SIN(M6);|67: TERM(0,-1,0, 0.00, 0.21, 0.00, 0.00, 0.00, -0.01);|67: TERM(1,-1,0, -0.11, -0.14, 0.24, -0.20, 0.01, 0.00);|8: END;|21: BEGIN (* VEN200 *)|30: DL:=0.0; DR:=0.0; DB:=0.0;|41: M1:=P2*FRAC(0.4861431+415.2018375*T);|41: M2:=P2*FRAC(0.1400197+162.5494552*T);|41: M3:=P2*FRAC(0.9944153+ 99.9982208*T);|41: M4:=P2*FRAC(0.0556297+ 53.1674631*T);|41: M5:=P2*FRAC(0.0567028+ 8.4305083*T);|41: M6:=P2*FRAC(0.8830539+ 3.3947206*T);|59: C2[0]:=1.0; S2[0]:=0.0; C2[1]:=COS(M2); S2[1]:=SIN(M2);|69: FOR I:=2 TO 8 DO ADDTHE(C2[I-1],S2[I-1],C2[1],S2[1],C2[I],S2[I]);|48: PERTMER; PERTEAR; PERTMAR; PERTJUP; PERTSAT;|43: DL:=DL + 2.74*SIN(P2*(0.0764+0.4174*T))|44: + 0.27*SIN(P2*(0.9201+0.3307*T));|25: DL:=DL + (1.9+1.8*T);|72: L:= 360.0*FRAC(0.3654783 + M2/P2 + ((5071.2+1.1*T)*T+DL)/1296.0E3 );|46: R:= 0.7233482 - 0.0000002*T + DR*1.0E-6;|58: B:= ( -67.70 + ( 0.04 + 0.01*T) * T + DB ) / 3600.0;|21: END; (* VEN200 *)|0:|75:(*-----------------------------------------------------------------------*)|75:(* MAR200: Mars; ecliptic coordinates L,B,R (in deg and AU) *)|75:(* equinox of date *)|75:(* (T: time in Julian centuries since J2000) *)|75:(* ( = (JED-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE MAR200(T:REAL;VAR L,B,R:REAL);|23: CONST P2=6.283185307;|45: VAR C4,S4: ARRAY [-2..16] OF REAL;|45: C,S: ARRAY [-9.. 0] OF REAL;|27: M2,M3,M4,M5,M6: REAL;|27: U,V, DL,DR,DB: REAL;|30: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|47: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2; END;|0:|63: PROCEDURE TERM(I1,I,IT:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|9: BEGIN|54: IF IT=0 THEN ADDTHE(C4[I1],S4[I1],C[I],S[I],U,V)|44: ELSE BEGIN U:=U*T; V:=V*T END;|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|49: PROCEDURE PERTVEN; (* perturbations by Venus *)|9: BEGIN|60: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M2); S[-1]:=-SIN(M2);|50: ADDTHE(C[-1],S[-1],C[-1],S[-1],C[-2],S[-2]);|71: TERM( 0,-1,0, -0.01, -0.03, 0.10, -0.04, 0.00, 0.00);|71: TERM( 1,-1,0, 0.05, 0.10, -2.08, 0.75, 0.00, 0.00);|71: TERM( 2,-1,0, -0.25, -0.57, -2.58, 1.18, 0.05, -0.04);|71: TERM( 2,-2,0, 0.02, 0.02, 0.13, -0.14, 0.00, 0.00);|71: TERM( 3,-1,0, 3.41, 5.38, 1.87, -1.15, 0.01, -0.01);|71: TERM( 3,-2,0, 0.02, 0.02, 0.11, -0.13, 0.00, 0.00);|71: TERM( 4,-1,0, 0.32, 0.49, -1.88, 1.21, -0.07, 0.07);|71: TERM( 4,-2,0, 0.03, 0.03, 0.12, -0.14, 0.00, 0.00);|71: TERM( 5,-1,0, 0.04, 0.06, -0.17, 0.11, -0.01, 0.01);|71: TERM( 5,-2,0, 0.11, 0.09, 0.35, -0.43, -0.01, 0.01);|71: TERM( 6,-2,0, -0.36, -0.28, -0.20, 0.25, 0.00, 0.00);|71: TERM( 7,-2,0, -0.03, -0.03, 0.11, -0.13, 0.00, -0.01);|8: END;|0:|71: PROCEDURE PERTEAR; (* Kepler terms and perturbations by the Earth *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M3); S[-1]:=-SIN(M3);|73: FOR I:=-1 DOWNTO -8 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|71: TERM( 1, 0,0, -5.32,38481.97,-141856.04, 0.40,-6321.67,1876.89);|71: TERM( 1, 0,1, -1.12, 37.98, -138.67, -2.93, 37.28, 117.48);|71: TERM( 1, 0,2, -0.32, -0.03, 0.12, -1.19, 1.04, -0.40);|71: TERM( 2, 0,0, 28.28, 2285.80, -6608.37, 0.00, -589.35, 174.81);|71: TERM( 2, 0,1, 1.64, 3.37, -12.93, 0.00, 2.89, 11.10);|71: TERM( 2, 0,2, 0.00, 0.00, 0.00, 0.00, 0.10, -0.03);|71: TERM( 3, 0,0, 5.31, 189.29, -461.81, 0.00, -61.98, 18.53);|71: TERM( 3, 0,1, 0.31, 0.35, -1.36, 0.00, 0.25, 1.19);|71: TERM( 4, 0,0, 0.81, 17.96, -38.26, 0.00, -6.88, 2.08);|71: TERM( 4, 0,1, 0.05, 0.04, -0.15, 0.00, 0.02, 0.14);|71: TERM( 5, 0,0, 0.11, 1.83, -3.48, 0.00, -0.79, 0.24);|71: TERM( 6, 0,0, 0.02, 0.20, -0.34, 0.00, -0.09, 0.03);|71: TERM(-1,-1,0, 0.09, 0.06, 0.14, -0.22, 0.02, -0.02);|71: TERM( 0,-1,0, 0.72, 0.49, 1.55, -2.31, 0.12, -0.10);|71: TERM( 1,-1,0, 7.00, 4.92, 13.93,-20.48, 0.08, -0.13);|71: TERM( 2,-1,0, 13.08, 4.89, -4.53, 10.01, -0.05, 0.13);|71: TERM( 2,-2,0, 0.14, 0.05, -0.48, -2.66, 0.01, 0.14);|71: TERM( 3,-1,0, 1.38, 0.56, -2.00, 4.85, -0.01, 0.19);|71: TERM( 3,-2,0, -6.85, 2.68, 8.38, 21.42, 0.00, 0.03);|71: TERM( 3,-3,0, -0.08, 0.20, 1.20, 0.46, 0.00, 0.00);|71: TERM( 4,-1,0, 0.16, 0.07, -0.19, 0.47, -0.01, 0.05);|71: TERM( 4,-2,0, -4.41, 2.14, -3.33, -7.21, -0.07, -0.09);|71: TERM( 4,-3,0, -0.12, 0.33, 2.22, 0.72, -0.03, -0.02);|71: TERM( 4,-4,0, -0.04, -0.06, -0.36, 0.23, 0.00, 0.00);|71: TERM( 5,-2,0, -0.44, 0.21, -0.70, -1.46, -0.06, -0.07);|71: TERM( 5,-3,0, 0.48, -2.60, -7.25, -1.37, 0.00, 0.00);|71: TERM( 5,-4,0, -0.09, -0.12, -0.66, 0.50, 0.00, 0.00);|71: TERM( 5,-5,0, 0.03, 0.00, 0.01, -0.17, 0.00, 0.00);|71: TERM( 6,-2,0, -0.05, 0.03, -0.07, -0.15, -0.01, -0.01);|71: TERM( 6,-3,0, 0.10, -0.96, 2.36, 0.30, 0.04, 0.00);|71: TERM( 6,-4,0, -0.17, -0.20, -1.09, 0.94, 0.02, -0.02);|71: TERM( 6,-5,0, 0.05, 0.00, 0.00, -0.30, 0.00, 0.00);|71: TERM( 7,-3,0, 0.01, -0.10, 0.32, 0.04, 0.02, 0.00);|71: TERM( 7,-4,0, 0.86, 0.77, 1.86, -2.01, 0.01, -0.01);|71: TERM( 7,-5,0, 0.09, -0.01, -0.05, -0.44, 0.00, 0.00);|71: TERM( 7,-6,0, -0.01, 0.02, 0.10, 0.08, 0.00, 0.00);|71: TERM( 8,-4,0, 0.20, 0.16, -0.53, 0.64, -0.01, 0.02);|71: TERM( 8,-5,0, 0.17, -0.03, -0.14, -0.84, 0.00, 0.01);|71: TERM( 8,-6,0, -0.02, 0.03, 0.16, 0.09, 0.00, 0.00);|71: TERM( 9,-5,0, -0.55, 0.15, 0.30, 1.10, 0.00, 0.00);|71: TERM( 9,-6,0, -0.02, 0.04, 0.20, 0.10, 0.00, 0.00);|71: TERM(10,-5,0, -0.09, 0.03, -0.10, -0.33, 0.00, -0.01);|71: TERM(10,-6,0, -0.05, 0.11, 0.48, 0.21, -0.01, 0.00);|71: TERM(11,-6,0, 0.10, -0.35, -0.52, -0.15, 0.00, 0.00);|71: TERM(11,-7,0, -0.01, -0.02, -0.10, 0.07, 0.00, 0.00);|71: TERM(12,-6,0, 0.01, -0.04, 0.18, 0.04, 0.01, 0.00);|71: TERM(12,-7,0, -0.05, -0.07, -0.29, 0.20, 0.01, 0.00);|71: TERM(13,-7,0, 0.23, 0.27, 0.25, -0.21, 0.00, 0.00);|71: TERM(14,-7,0, 0.02, 0.03, -0.10, 0.09, 0.00, 0.00);|71: TERM(14,-8,0, 0.05, 0.01, 0.03, -0.23, 0.00, 0.03);|71: TERM(15,-8,0, -1.53, 0.27, 0.06, 0.42, 0.00, 0.00);|71: TERM(16,-8,0, -0.14, 0.02, -0.10, -0.55, -0.01, -0.02);|71: TERM(16,-9,0, 0.03, -0.06, -0.25, -0.11, 0.00, 0.00);|8: END;|0:|51: PROCEDURE PERTJUP; (* perturbations by Jupiter *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M5); S[-1]:=-SIN(M5);|73: FOR I:=-1 DOWNTO -4 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|71: TERM(-2,-1,0, 0.05, 0.03, 0.08, -0.14, 0.01, -0.01);|71: TERM(-1,-1,0, 0.39, 0.27, 0.92, -1.50, -0.03, -0.06);|71: TERM(-1,-2,0, -0.16, 0.03, 0.13, 0.67, -0.01, 0.06);|71: TERM(-1,-3,0, -0.02, 0.01, 0.05, 0.09, 0.00, 0.01);|71: TERM( 0,-1,0, 3.56, 1.13, -5.41, -7.18, -0.25, -0.24);|71: TERM( 0,-2,0, -1.44, 0.25, 1.24, 7.96, 0.02, 0.31);|71: TERM( 0,-3,0, -0.21, 0.11, 0.55, 1.04, 0.01, 0.05);|71: TERM( 0,-4,0, -0.02, 0.02, 0.11, 0.11, 0.00, 0.01);|71: TERM( 1,-1,0, 16.67, -19.15, 61.00, 53.36, -0.06, -0.07);|71: TERM( 1,-2,0,-21.64, 3.18, -7.77,-54.64, -0.31, 0.50);|71: TERM( 1,-3,0, -2.82, 1.45, -2.53, -5.73, 0.01, 0.07);|71: TERM( 1,-4,0, -0.31, 0.28, -0.34, -0.51, 0.00, 0.00);|71: TERM( 2,-1,0, 2.15, -2.29, 7.04, 6.94, 0.33, 0.19);|71: TERM( 2,-2,0,-15.69, 3.31, -15.70,-73.17, -0.17, -0.25);|71: TERM( 2,-3,0, -1.73, 1.95, -9.19, -7.20, 0.02, -0.03);|71: TERM( 2,-4,0, -0.01, 0.33, -1.42, 0.08, 0.01, -0.01);|71: TERM( 2,-5,0, 0.03, 0.03, -0.13, 0.12, 0.00, 0.00);|71: TERM( 3,-1,0, 0.26, -0.28, 0.73, 0.71, 0.08, 0.04);|71: TERM( 3,-2,0, -2.06, 0.46, -1.61, -6.72, -0.13, -0.25);|71: TERM( 3,-3,0, -1.28, -0.27, 2.21, -6.90, -0.04, -0.02);|71: TERM( 3,-4,0, -0.22, 0.08, -0.44, -1.25, 0.00, 0.01);|71: TERM( 3,-5,0, -0.02, 0.03, -0.15, -0.08, 0.00, 0.00);|71: TERM( 4,-1,0, 0.03, -0.03, 0.08, 0.08, 0.01, 0.01);|71: TERM( 4,-2,0, -0.26, 0.06, -0.17, -0.70, -0.03, -0.05);|71: TERM( 4,-3,0, -0.20, -0.05, 0.22, -0.79, -0.01, -0.02);|71: TERM( 4,-4,0, -0.11, -0.14, 0.93, -0.60, 0.00, 0.00);|71: TERM( 4,-5,0, -0.04, -0.02, 0.09, -0.23, 0.00, 0.00);|71: TERM( 5,-4,0, -0.02, -0.03, 0.13, -0.09, 0.00, 0.00);|71: TERM( 5,-5,0, 0.00, -0.03, 0.21, 0.01, 0.00, 0.00);|8: END;|0:|51: PROCEDURE PERTSAT; (* perturbations by Saturn *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M6); S[-1]:=-SIN(M6);|73: FOR I:=-1 DOWNTO -3 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|71: TERM(-1,-1,0, 0.03, 0.13, 0.48, -0.13, 0.02, 0.00);|71: TERM( 0,-1,0, 0.27, 0.84, 0.40, -0.43, 0.01, -0.01);|71: TERM( 0,-2,0, 0.12, -0.04, -0.33, -0.55, -0.01, -0.02);|71: TERM( 0,-3,0, 0.02, -0.01, -0.07, -0.08, 0.00, 0.00);|71: TERM( 1,-1,0, 1.12, 0.76, -2.66, 3.91, -0.01, 0.01);|71: TERM( 1,-2,0, 1.49, -0.95, 3.07, 4.83, 0.04, -0.05);|71: TERM( 1,-3,0, 0.21, -0.18, 0.55, 0.64, 0.00, 0.00);|71: TERM( 2,-1,0, 0.12, 0.10, -0.29, 0.34, -0.01, 0.02);|71: TERM( 2,-2,0, 0.51, -0.36, 1.61, 2.25, 0.03, 0.01);|71: TERM( 2,-3,0, 0.10, -0.10, 0.50, 0.43, 0.00, 0.00);|71: TERM( 2,-4,0, 0.01, -0.02, 0.11, 0.05, 0.00, 0.00);|71: TERM( 3,-2,0, 0.07, -0.05, 0.16, 0.22, 0.01, 0.01);|8: END;|0:|21: BEGIN (* MAR200 *)|30: DL:=0.0; DR:=0.0; DB:=0.0;|41: M2:=P2*FRAC(0.1382208+162.5482542*T);|40: M3:=P2*FRAC(0.9926208+99.9970236*T);|41: M4:=P2*FRAC(0.0538553+ 53.1662736*T);|40: M5:=P2*FRAC(0.0548944+ 8.4290611*T);|41: M6:=P2*FRAC(0.8811167+ 3.3935250*T);|60: C4[0]:=1.0; S4[0]:=0.0; C4[1]:=COS(M4); S4[1]:=SIN(M4);|70: FOR I:=2 TO 16 DO ADDTHE(C4[I-1],S4[I-1],C4[1],S4[1],C4[I],S4[I]);|63: FOR I:=-2 TO -1 DO BEGIN C4[I]:=C4[-I]; S4[I]:=-S4[-I] END;|39: PERTVEN; PERTEAR; PERTJUP; PERTSAT;|44: DL:=DL + 52.49*SIN(P2*(0.1868+0.0549*T))|44: + 0.61*SIN(P2*(0.9220+0.3307*T))|44: + 0.32*SIN(P2*(0.4731+2.1485*T))|45: + 0.28*SIN(P2*(0.9467+0.1133*T));|36: DL:=DL + (0.14+0.87*T-0.11*T*T);|72: L:= 360.0*FRAC(0.9334591 + M4/P2 + ((6615.5+1.1*T)*T+DL)/1296.0E3 );|46: R:= 1.5303352 + 0.0000131*T + DR*1.0E-6;|58: B:= ( 596.32 + (-2.92 - 0.10*T) * T + DB ) / 3600.0;|6: END;|0:|75:(*-----------------------------------------------------------------------*)|75:(* JUP200: Jupiter; ecliptic coordinates L,B,R (in deg and AU) *)|75:(* equinox of date *)|75:(* T: time in Julian centuries since J2000 *)|75:(* = (JED-2451545.0)/36525 *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE JUP200(T:REAL;VAR L,B,R:REAL);|23: CONST P2=6.283185307;|42: VAR C5,S5: ARRAY [-1..5] OF REAL;|43: C,S: ARRAY [-10..0] OF REAL;|25: M5,M6,M7: REAL;|25: U,V,DL,DR,DB: REAL;|28: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|47: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2; END;|0:|63: PROCEDURE TERM(I5,I,IT:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|9: BEGIN|54: IF IT=0 THEN ADDTHE(C5[I5],S5[I5],C[I],S[I],U,V)|44: ELSE BEGIN U:=U*T; V:=V*T END;|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|68: PROCEDURE PERTSAT; (* Kepler terms and perturbations by Saturn *)|19: VAR I: INTEGER;|9: BEGIN|60: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M6); S[-1]:=-SIN(M6);|73: FOR I:=-1 DOWNTO -9 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|66: TERM(-1, -1,0, -0.2, 1.4, 2.0, 0.6, 0.1, -0.2);|66: TERM( 0, -1,0, 9.4, 8.9, 3.9, -8.3, -0.4, -1.4);|66: TERM( 0, -2,0, 5.6, -3.0, -5.4, -5.7, -2.0, 0.0);|66: TERM( 0, -3,0, -4.0, -0.1, 0.0, 5.5, 0.0, 0.0);|66: TERM( 0, -5,0, 3.3, -1.6, -1.6, -3.1, -0.5, -1.2);|66: TERM( 1, 0,0,-113.1,19998.6,-25208.2,-142.2,-4670.7,288.9);|66: TERM( 1, 0,1, -76.1, 66.9, -84.2, -95.8, 21.6, 29.4);|66: TERM( 1, 0,2, -0.5, -0.3, 0.4, -0.7, 0.1, -0.1);|66: TERM( 1, -1,0, 78.8, -14.5, 11.5, 64.4, -0.2, 0.2);|66: TERM( 1, -2,0, -2.0, -132.4, 28.8, 4.3, -1.7, 0.4);|66: TERM( 1, -2,1, -1.1, -0.7, 0.2, -0.3, 0.0, 0.0);|66: TERM( 1, -3,0, -7.5, -6.8, -0.4, -1.1, 0.6, -0.9);|66: TERM( 1, -4,0, 0.7, 0.7, 0.6, -1.1, 0.0, -0.2);|66: TERM( 1, -5,0, 51.5, -26.0, -32.5, -64.4, -4.9,-12.4);|66: TERM( 1, -5,1, -1.2, -2.2, -2.7, 1.5, -0.4, 0.3);|66: TERM( 2, 0,0, -3.4, 632.0, -610.6, -6.5, -226.8, 12.7);|66: TERM( 2, 0,1, -4.2, 3.8, -4.1, -4.5, 0.2, 0.6);|66: TERM( 2, -1,0, 5.3, -0.7, 0.7, 6.1, 0.2, 1.1);|66: TERM( 2, -2,0, -76.4, -185.1, 260.2,-108.0, 1.6, 0.0);|66: TERM( 2, -3,0, 66.7, 47.8, -51.4, 69.8, 0.9, 0.3);|66: TERM( 2, -3,1, 0.6, -1.0, 1.0, 0.6, 0.0, 0.0);|66: TERM( 2, -4,0, 17.0, 1.4, -1.8, 9.6, 0.0, -0.1);|66: TERM( 2, -5,0,1066.2, -518.3, -1.3, -23.9, 1.8, -0.3);|66: TERM( 2, -5,1, -25.4, -40.3, -0.9, 0.3, 0.0, 0.0);|66: TERM( 2, -5,2, -0.7, 0.5, 0.0, 0.0, 0.0, 0.0);|66: TERM( 3, 0,0, -0.1, 28.0, -22.1, -0.2, -12.5, 0.7);|66: TERM( 3, -2,0, -5.0, -11.5, 11.7, -5.4, 2.1, -1.0);|66: TERM( 3, -3,0, 16.9, -6.4, 13.4, 26.9, -0.5, 0.8);|66: TERM( 3, -4,0, 7.2, -13.3, 20.9, 10.5, 0.1, -0.1);|66: TERM( 3, -5,0, 68.5, 134.3, -166.9, 86.5, 7.1, 15.2);|66: TERM( 3, -5,1, 3.5, -2.7, 3.4, 4.3, 0.5, -0.4);|66: TERM( 3, -6,0, 0.6, 1.0, -0.9, 0.5, 0.0, 0.0);|66: TERM( 3, -7,0, -1.1, 1.7, -0.4, -0.2, 0.0, 0.0);|66: TERM( 4, 0,0, 0.0, 1.4, -1.0, 0.0, -0.6, 0.0);|66: TERM( 4, -2,0, -0.3, -0.7, 0.4, -0.2, 0.2, -0.1);|66: TERM( 4, -3,0, 1.1, -0.6, 0.9, 1.2, 0.1, 0.2);|66: TERM( 4, -4,0, 3.2, 1.7, -4.1, 5.8, 0.2, 0.1);|66: TERM( 4, -5,0, 6.7, 8.7, -9.3, 8.7, -1.1, 1.6);|66: TERM( 4, -6,0, 1.5, -0.3, 0.6, 2.4, 0.0, 0.0);|66: TERM( 4, -7,0, -1.9, 2.3, -3.2, -2.7, 0.0, -0.1);|66: TERM( 4, -8,0, 0.4, -1.8, 1.9, 0.5, 0.0, 0.0);|66: TERM( 4, -9,0, -0.2, -0.5, 0.3, -0.1, 0.0, 0.0);|66: TERM( 4,-10,0, -8.6, -6.8, -0.4, 0.1, 0.0, 0.0);|66: TERM( 4,-10,1, -0.5, 0.6, 0.0, 0.0, 0.0, 0.0);|66: TERM( 5, -5,0, -0.1, 1.5, -2.5, -0.8, -0.1, 0.1);|66: TERM( 5, -6,0, 0.1, 0.8, -1.6, 0.1, 0.0, 0.0);|66: TERM( 5, -9,0, -0.5, -0.1, 0.1, -0.8, 0.0, 0.0);|66: TERM( 5,-10,0, 2.5, -2.2, 2.8, 3.1, 0.1, -0.2);|8: END;|0:|51: PROCEDURE PERTURA; (* perturbations by Uranus *)|9: BEGIN|38: C[-1]:=COS(M7); S[-1]:=-SIN(M7);|50: ADDTHE(C[-1],S[-1],C[-1],S[-1],C[-2],S[-2]);|66: TERM( 1, -1,0, 0.4, 0.9, 0.0, 0.0, 0.0, 0.0);|66: TERM( 1, -2,0, 0.4, 0.4, -0.4, 0.3, 0.0, 0.0);|8: END;|0:|62: PROCEDURE PERTSUR; (* perturbations by Saturn and Uranus *)|22: VAR PHI,X,Y: REAL;|9: BEGIN|54: PHI:=(2*M5-6*M6+3*M7); X:=COS(PHI); Y:=SIN(PHI);|39: DL:=DL-0.8*X+8.5*Y; DR:=DR-0.1*X;|34: ADDTHE(X,Y,C5[1],S5[1],X,Y);|59: DL:=DL+0.4*X+0.5*Y; DR:=DR-0.7*X+0.5*Y; DB:=DB-0.1*X;|8: END;|0:|21: BEGIN (* JUP200 *)|30: DL:=0.0; DR:=0.0; DB:=0.0;|75: M5:=P2*FRAC(0.0565314+8.4302963*T); M6:=P2*FRAC(0.8829867+3.3947688*T);|39: M7:=P2*FRAC(0.3969537+1.1902586*T);|31: C5[0]:=1.0; S5[0]:=0.0;|67: C5[1]:=COS(M5); S5[1]:=SIN(M5); C5[-1]:=C5[1]; S5[-1]:=-S5[1];|69: FOR I:=2 TO 5 DO ADDTHE(C5[I-1],S5[I-1],C5[1],S5[1],C5[I],S5[I]);|30: PERTSAT; PERTURA; PERTSUR;|72: L:= 360.0*FRAC(0.0388910 + M5/P2 + ((5025.2+0.8*T)*T+DL)/1296.0E3 );|44: R:= 5.208873 + 0.000041*T + DR*1.0E-5;|40: B:= ( 227.3 - 0.3*T + DB ) / 3600.0;|21: END; (* JUP200 *)|0:|75:(*-----------------------------------------------------------------------*)|75:(* SAT200: Saturn; ecliptic coordinates L,B,R (in deg and AU) *)|75:(* equinox of date *)|75:(* (T: time in Julian centuries since J2000) *)|75:(* ( = (JED-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE SAT200(T:REAL;VAR L,B,R:REAL);|23: CONST P2=6.283185307;|44: VAR C6,S6: ARRAY [ 0..11] OF REAL;|44: C,S: ARRAY [-6.. 1] OF REAL;|26: M5,M6,M7,M8: REAL;|26: U,V, DL,DR,DB: REAL;|29: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|47: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2; END;|0:|63: PROCEDURE TERM(I6,I,IT:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|9: BEGIN|54: IF IT=0 THEN ADDTHE(C6[I6],S6[I6],C[I],S[I],U,V)|44: ELSE BEGIN U:=U*T; V:=V*T END;|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|69: PROCEDURE PERTJUP; (* Kepler terms and perturbations by Jupiter *)|19: VAR I: INTEGER;|9: BEGIN|57: C[0]:=1.0; S[0]:=0.0; C[1]:=COS(M5); S[1]:=SIN(M5);|71: FOR I:=0 DOWNTO -5 DO ADDTHE(C[I],S[I],C[1],-S[1],C[I-1],S[I-1]);|68: TERM( 0,-1,0, 12.0, -1.4, -13.9, 6.4, 1.2, -1.8);|68: TERM( 0,-2,0, 0.0, -0.2, -0.9, 1.0, 0.0, -0.1);|68: TERM( 1, 1,0, 0.9, 0.4, -1.8, 1.9, 0.2, 0.2);|68: TERM( 1, 0,0, -348.3,22907.7,-52915.5, -752.2,-3266.5,8314.4);|68: TERM( 1, 0,1, -225.2, -146.2, 337.7, -521.3, 79.6, 17.4);|68: TERM( 1, 0,2, 1.3, -1.4, 3.2, 2.9, 0.1, -0.4);|68: TERM( 1,-1,0, -1.0, -30.7, 108.6, -815.0, -3.6, -9.3);|68: TERM( 1,-2,0, -2.0, -2.7, -2.1, -11.9, -0.1, -0.4);|68: TERM( 2, 1,0, 0.1, 0.2, -1.0, 0.3, 0.0, 0.0);|68: TERM( 2, 0,0, 44.2, 724.0, -1464.3, -34.7, -188.7, 459.1);|68: TERM( 2, 0,1, -17.0, -11.3, 18.9, -28.6, 1.0, -3.7);|68: TERM( 2,-1,0, -3.5, -426.6, -546.5, -26.5, -1.6, -2.7);|68: TERM( 2,-1,1, 3.5, -2.2, -2.6, -4.3, 0.0, 0.0);|68: TERM( 2,-2,0, 10.5, -30.9, -130.5, -52.3, -1.9, 0.2);|68: TERM( 2,-3,0, -0.2, -0.4, -1.2, -0.1, -0.1, 0.0);|68: TERM( 3, 0,0, 6.5, 30.5, -61.1, 0.4, -11.6, 28.1);|68: TERM( 3, 0,1, -1.2, -0.7, 1.1, -1.8, -0.2, -0.6);|68: TERM( 3,-1,0, 29.0, -40.2, 98.2, 45.3, 3.2, -9.4);|68: TERM( 3,-1,1, 0.6, 0.6, -1.0, 1.3, 0.0, 0.0);|68: TERM( 3,-2,0, -27.0, -21.1, -68.5, 8.1, -19.8, 5.4);|68: TERM( 3,-2,1, 0.9, -0.5, -0.4, -2.0, -0.1, -0.8);|68: TERM( 3,-3,0, -5.4, -4.1, -19.1, 26.2, -0.1, -0.1);|68: TERM( 4, 0,0, 0.6, 1.4, -3.0, -0.2, -0.6, 1.6);|68: TERM( 4,-1,0, 1.5, -2.5, 12.4, 4.7, 1.0, -1.1);|68: TERM( 4,-2,0, -821.9, -9.6, -26.0, 1873.6, -70.5, -4.4);|68: TERM( 4,-2,1, 4.1, -21.9, -50.3, -9.9, 0.7, -3.0);|68: TERM( 4,-3,0, -2.0, -4.7, -19.3, 8.2, -0.1, -0.3);|68: TERM( 4,-4,0, -1.5, 1.3, 6.5, 7.3, 0.0, 0.0);|68: TERM( 5,-2,0,-2627.6,-1277.3, 117.4, -344.1, -13.8, -4.3);|68: TERM( 5,-2,1, 63.0, -98.6, 12.7, 6.7, 0.1, -0.2);|68: TERM( 5,-2,2, 1.7, 1.2, -0.2, 0.3, 0.0, 0.0);|68: TERM( 5,-3,0, 0.4, -3.6, -11.3, -1.6, 0.0, -0.3);|68: TERM( 5,-4,0, -1.4, 0.3, 1.5, 6.3, -0.1, 0.0);|68: TERM( 5,-5,0, 0.3, 0.6, 3.0, -1.7, 0.0, 0.0);|68: TERM( 6,-2,0, -146.7, -73.7, 166.4, -334.3, -43.6, -46.7);|68: TERM( 6,-2,1, 5.2, -6.8, 15.1, 11.4, 1.7, -1.0);|68: TERM( 6,-3,0, 1.5, -2.9, -2.2, -1.3, 0.1, -0.1);|68: TERM( 6,-4,0, -0.7, -0.2, -0.7, 2.8, 0.0, 0.0);|68: TERM( 6,-5,0, 0.0, 0.5, 2.5, -0.1, 0.0, 0.0);|68: TERM( 6,-6,0, 0.3, -0.1, -0.3, -1.2, 0.0, 0.0);|68: TERM( 7,-2,0, -9.6, -3.9, 9.6, -18.6, -4.7, -5.3);|68: TERM( 7,-2,1, 0.4, -0.5, 1.0, 0.9, 0.3, -0.1);|68: TERM( 7,-3,0, 3.0, 5.3, 7.5, -3.5, 0.0, 0.0);|68: TERM( 7,-4,0, 0.2, 0.4, 1.6, -1.3, 0.0, 0.0);|68: TERM( 7,-5,0, -0.1, 0.2, 1.0, 0.5, 0.0, 0.0);|68: TERM( 7,-6,0, 0.2, 0.0, 0.2, -1.0, 0.0, 0.0);|68: TERM( 8,-2,0, -0.7, -0.2, 0.6, -1.2, -0.4, -0.4);|68: TERM( 8,-3,0, 0.5, 1.0, -2.0, 1.5, 0.1, 0.2);|68: TERM( 8,-4,0, 0.4, 1.3, 3.6, -0.9, 0.0, -0.1);|68: TERM( 9,-4,0, 4.0, -8.7, -19.9, -9.9, 0.2, -0.4);|68: TERM( 9,-4,1, 0.5, 0.3, 0.8, -1.8, 0.0, 0.0);|68: TERM(10,-4,0, 21.3, -16.8, 3.3, 3.3, 0.2, -0.2);|68: TERM(10,-4,1, 1.0, 1.7, -0.4, 0.4, 0.0, 0.0);|68: TERM(11,-4,0, 1.6, -1.3, 3.0, 3.7, 0.8, -0.2);|8: END;|0:|51: PROCEDURE PERTURA; (* perturbations by Uranus *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M7); S[-1]:=-SIN(M7);|73: FOR I:=-1 DOWNTO -4 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|68: TERM( 0,-1,0, 1.0, 0.7, 0.4, -1.5, 0.1, 0.0);|68: TERM( 0,-2,0, 0.0, -0.4, -1.1, 0.1, -0.1, -0.1);|68: TERM( 0,-3,0, -0.9, -1.2, -2.7, 2.1, -0.5, -0.3);|68: TERM( 1,-1,0, 7.8, -1.5, 2.3, 12.7, 0.0, 0.0);|68: TERM( 1,-2,0, -1.1, -8.1, 5.2, -0.3, -0.3, -0.3);|68: TERM( 1,-3,0, -16.4, -21.0, -2.1, 0.0, 0.4, 0.0);|68: TERM( 2,-1,0, 0.6, -0.1, 0.1, 1.2, 0.1, 0.0);|68: TERM( 2,-2,0, -4.9, -11.7, 31.5, -13.3, 0.0, -0.2);|68: TERM( 2,-3,0, 19.1, 10.0, -22.1, 42.1, 0.1, -1.1);|68: TERM( 2,-4,0, 0.9, -0.1, 0.1, 1.4, 0.0, 0.0);|68: TERM( 3,-2,0, -0.4, -0.9, 1.7, -0.8, 0.0, -0.3);|68: TERM( 3,-3,0, 2.3, 0.0, 1.0, 5.7, 0.3, 0.3);|68: TERM( 3,-4,0, 0.3, -0.7, 2.0, 0.7, 0.0, 0.0);|68: TERM( 3,-5,0, -0.1, -0.4, 1.1, -0.3, 0.0, 0.0);|8: END;|0:|52: PROCEDURE PERTNEP; (* perturbations by Neptune *)|9: BEGIN|38: C[-1]:=COS(M8); S[-1]:=-SIN(M8);|50: ADDTHE(C[-1],S[-1],C[-1],S[-1],C[-2],S[-2]);|68: TERM( 1,-1,0, -1.3, -1.2, 2.3, -2.5, 0.0, 0.0);|68: TERM( 1,-2,0, 1.0, -0.1, 0.1, 1.4, 0.0, 0.0);|68: TERM( 2,-2,0, 1.1, -0.1, 0.2, 3.3, 0.0, 0.0);|8: END;|0:|63: PROCEDURE PERTJUR; (* perturbations by Jupiter and Uranus *)|22: VAR PHI,X,Y: REAL;|9: BEGIN|55: PHI:=(-2*M5+5*M6-3*M7); X:=COS(PHI); Y:=SIN(PHI);|65: DL:=DL-0.8*X-0.1*Y; DR:=DR-0.2*X+1.8*Y; DB:=DB+0.3*X+0.5*Y;|34: ADDTHE(X,Y,C6[1],S6[1],X,Y);|63: DL:=DL+(+2.4-0.7*T)*X+(27.8-0.4*T)*Y; DR:=DR+2.1*X-0.2*Y;|34: ADDTHE(X,Y,C6[1],S6[1],X,Y);|65: DL:=DL+0.1*X+1.6*Y; DR:=DR-3.6*X+0.3*Y; DB:=DB-0.2*X+0.6*Y;|8: END;|0:|21: BEGIN (* SAT200 *)|30: DL:=0.0; DR:=0.0; DB:=0.0;|75: M5:=P2*FRAC(0.0565314+8.4302963*T); M6:=P2*FRAC(0.8829867+3.3947688*T);|75: M7:=P2*FRAC(0.3969537+1.1902586*T); M8:=P2*FRAC(0.7208473+0.6068623*T);|60: C6[0]:=1.0; S6[0]:=0.0; C6[1]:=COS(M6); S6[1]:=SIN(M6);|70: FOR I:=2 TO 11 DO ADDTHE(C6[I-1],S6[I-1],C6[1],S6[1],C6[I],S6[I]);|39: PERTJUP; PERTURA; PERTNEP; PERTJUR;|73: L:= 360.0*FRAC(0.2561136 + M6/P2 + ((5018.6+T*1.9)*T +DL)/1296.0E3 );|44: R:= 9.557584 - 0.000186*T + DR*1.0E-5;|41: B:= ( 175.1 - 10.2*T + DB ) / 3600.0;|21: END; (* SAT200 *)|0:|75:(*-----------------------------------------------------------------------*)|75:(* URA200: Uranus; ecliptic coordinates L,B,R (in deg and AU) *)|75:(* equinox of date *)|75:(* (T: time in Julian centuries since J2000) *)|75:(* ( = (JED-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE URA200(T:REAL;VAR L,B,R:REAL);|23: CONST P2=6.283185307;|43: VAR C7,S7: ARRAY [-2..7] OF REAL;|43: C,S: ARRAY [-8..0] OF REAL;|26: M5,M6,M7,M8: REAL;|26: U,V, DL,DR,DB: REAL;|29: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|47: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2; END;|0:|63: PROCEDURE TERM(I7,I,IT:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|9: BEGIN|54: IF IT=0 THEN ADDTHE(C7[I7],S7[I7],C[I],S[I],U,V)|44: ELSE BEGIN U:=U*T; V:=V*T END;|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|52: PROCEDURE PERTJUP; (* perturbations by Jupiter *)|9: BEGIN|60: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M5); S[-1]:=-SIN(M5);|50: ADDTHE(C[-1],S[-1],C[-1],S[-1],C[-2],S[-2]);|64: TERM(-1,-1,0, 0.0, 0.0, -0.1, 1.7, -0.1, 0.0);|64: TERM( 0,-1,0, 0.5, -1.2, 18.9, 9.1, -0.9, 0.1);|64: TERM( 1,-1,0,-21.2, 48.7, -455.5,-198.8, 0.0, 0.0);|64: TERM( 1,-2,0, -0.5, 1.2, -10.9, -4.8, 0.0, 0.0);|64: TERM( 2,-1,0, -1.3, 3.2, -23.2, -11.1, 0.3, 0.1);|64: TERM( 2,-2,0, -0.2, 0.2, 1.1, 1.5, 0.0, 0.0);|64: TERM( 3,-1,0, 0.0, 0.2, -1.8, 0.4, 0.0, 0.0);|8: END;|0:|51: PROCEDURE PERTSAT; (* perturbations by Saturn *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M6); S[-1]:=-SIN(M6);|73: FOR I:=-1 DOWNTO -3 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|64: TERM( 0,-1,0, 1.4, -0.5, -6.4, 9.0, -0.4, -0.8);|64: TERM( 1,-1,0,-18.6, -12.6, 36.7,-336.8, 1.0, 0.3);|64: TERM( 1,-2,0, -0.7, -0.3, 0.5, -7.5, 0.1, 0.0);|64: TERM( 2,-1,0, 20.0, -141.6, -587.1,-107.0, 3.1, -0.8);|64: TERM( 2,-1,1, 1.0, 1.4, 5.8, -4.0, 0.0, 0.0);|64: TERM( 2,-2,0, 1.6, -3.8, -35.6, -16.0, 0.0, 0.0);|64: TERM( 3,-1,0, 75.3, -100.9, 128.9, 77.5, -0.8, 0.1);|64: TERM( 3,-1,1, 0.2, 1.8, -1.9, 0.3, 0.0, 0.0);|64: TERM( 3,-2,0, 2.3, -1.3, -9.5, -17.9, 0.0, 0.1);|64: TERM( 3,-3,0, -0.7, -0.5, -4.9, 6.8, 0.0, 0.0);|64: TERM( 4,-1,0, 3.4, -5.0, 21.6, 14.3, -0.8, -0.5);|64: TERM( 4,-2,0, 1.9, 0.1, 1.2, -12.1, 0.0, 0.0);|64: TERM( 4,-3,0, -0.1, -0.4, -3.9, 1.2, 0.0, 0.0);|64: TERM( 4,-4,0, -0.2, 0.1, 1.6, 1.8, 0.0, 0.0);|64: TERM( 5,-1,0, 0.2, -0.3, 1.0, 0.6, -0.1, 0.0);|64: TERM( 5,-2,0, -2.2, -2.2, -7.7, 8.5, 0.0, 0.0);|64: TERM( 5,-3,0, 0.1, -0.2, -1.4, -0.4, 0.0, 0.0);|64: TERM( 5,-4,0, -0.1, 0.0, 0.1, 1.2, 0.0, 0.0);|64: TERM( 6,-2,0, -0.2, -0.6, 1.4, -0.7, 0.0, 0.0);|8: END;|0:|70: PROCEDURE PERTNEP; (* Kepler terms and perturbations by Neptune *)|19: VAR I: INTEGER;|9: BEGIN|38: C[-1]:=COS(M8); S[-1]:=-SIN(M8);|73: FOR I:=-1 DOWNTO -7 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|64: TERM( 1, 0,0,-78.1,19518.1,-90718.2,-334.7,2759.5,-311.9);|64: TERM( 1, 0,1,-81.6, 107.7, -497.4,-379.5, -2.8, -43.7);|64: TERM( 1, 0,2, -6.6, -3.1, 14.4, -30.6, -0.4, -0.5);|64: TERM( 1, 0,3, 0.0, -0.5, 2.4, 0.0, 0.0, 0.0);|64: TERM( 2, 0,0, -2.4, 586.1, -2145.2, -15.3, 130.6, -14.3);|64: TERM( 2, 0,1, -4.5, 6.6, -24.2, -17.8, 0.7, -1.6);|64: TERM( 2, 0,2, -0.4, 0.0, 0.1, -1.4, 0.0, 0.0);|64: TERM( 3, 0,0, 0.0, 24.5, -76.2, -0.6, 7.0, -0.7);|64: TERM( 3, 0,1, -0.2, 0.4, -1.4, -0.8, 0.1, -0.1);|64: TERM( 4, 0,0, 0.0, 1.1, -3.0, 0.1, 0.4, 0.0);|64: TERM(-1,-1,0, -0.2, 0.2, 0.7, 0.7, -0.1, 0.0);|64: TERM( 0,-1,0, -2.8, 2.5, 8.7, 10.5, -0.4, -0.1);|64: TERM( 1,-1,0,-28.4, 20.3, -51.4, -72.0, 0.0, 0.0);|64: TERM( 1,-2,0, -0.6, -0.1, 4.2, -14.6, 0.2, 0.4);|64: TERM( 1,-3,0, 0.2, 0.5, 3.4, -1.6, -0.1, 0.1);|64: TERM( 2,-1,0, -1.8, 1.3, -5.5, -7.7, 0.0, 0.3);|64: TERM( 2,-2,0, 29.4, 10.2, -29.0, 83.2, 0.0, 0.0);|64: TERM( 2,-3,0, 8.8, 17.8, -41.9, 21.5, -0.1, -0.3);|64: TERM( 2,-4,0, 0.0, 0.1, -2.1, -0.9, 0.1, 0.0);|64: TERM( 3,-2,0, 1.5, 0.5, -1.7, 5.1, 0.1, -0.2);|64: TERM( 3,-3,0, 4.4, 14.6, -84.3, 25.2, 0.1, -0.1);|64: TERM( 3,-4,0, 2.4, -4.5, 12.0, 6.2, 0.0, 0.0);|64: TERM( 3,-5,0, 2.9, -0.9, 2.1, 6.2, 0.0, 0.0);|64: TERM( 4,-3,0, 0.3, 1.0, -4.0, 1.1, 0.1, -0.1);|64: TERM( 4,-4,0, 2.1, -2.7, 17.9, 14.0, 0.0, 0.0);|64: TERM( 4,-5,0, 3.0, -0.4, 2.3, 17.6, -0.1, -0.1);|64: TERM( 4,-6,0, -0.6, -0.5, 1.1, -1.6, 0.0, 0.0);|64: TERM( 5,-4,0, 0.2, -0.2, 1.0, 0.8, 0.0, 0.0);|64: TERM( 5,-5,0, -0.9, -0.1, 0.6, -7.1, 0.0, 0.0);|64: TERM( 5,-6,0, -0.5, -0.6, 3.8, -3.6, 0.0, 0.0);|64: TERM( 5,-7,0, 0.0, -0.5, 3.0, 0.1, 0.0, 0.0);|64: TERM( 6,-6,0, 0.2, 0.3, -2.7, 1.6, 0.0, 0.0);|64: TERM( 6,-7,0, -0.1, 0.2, -2.0, -0.4, 0.0, 0.0);|64: TERM( 7,-7,0, 0.1, -0.2, 1.3, 0.5, 0.0, 0.0);|64: TERM( 7,-8,0, 0.1, 0.0, 0.4, 0.9, 0.0, 0.0);|8: END;|0:|63: PROCEDURE PERTJSU; (* perturbations by Jupiter and Saturn *)|19: VAR I: INTEGER;|9: BEGIN|46: C[-1]:=COS(M6); S[-1]:=-SIN(M6);|54: C[-4]:=COS(-4*M6+2*M5); S[-4]:= SIN(-4*M6+2*M5);|73: FOR I:=-4 DOWNTO -5 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|64: TERM(-2,-4,0, -0.7, 0.4, -1.5, -2.5, 0.0, 0.0);|64: TERM(-1,-4,0, -0.1, -0.1, -2.2, 1.0, 0.0, 0.0);|64: TERM( 1,-5,0, 0.1, -0.4, 1.4, 0.2, 0.0, 0.0);|64: TERM( 1,-6,0, 0.4, 0.5, -0.8, -0.8, 0.0, 0.0);|64: TERM( 2,-6,0, 5.7, 6.3, 28.5, -25.5, 0.0, 0.0);|64: TERM( 2,-6,1, 0.1, -0.2, -1.1, -0.6, 0.0, 0.0);|64: TERM( 3,-6,0, -1.4, 29.2, -11.4, 1.1, 0.0, 0.0);|64: TERM( 3,-6,1, 0.8, -0.4, 0.2, 0.3, 0.0, 0.0);|64: TERM( 4,-6,0, 0.0, 1.3, -6.0, -0.1, 0.0, 0.0);|8: END;|4: |21: BEGIN (* URA200 *)|30: DL:=0.0; DR:=0.0; DB:=0.0;|75: M5:=P2*FRAC(0.0564472+8.4302889*T); M6:=P2*FRAC(0.8829611+3.3947583*T);|75: M7:=P2*FRAC(0.3967117+1.1902849*T); M8:=P2*FRAC(0.7216833+0.6068528*T);|59: C7[0]:=1.0; S7[0]:=0.0; C7[1]:=COS(M7); S7[1]:=SIN(M7);|69: FOR I:=2 TO 7 DO ADDTHE(C7[I-1],S7[I-1],C7[1],S7[1],C7[I],S7[I]);|62: FOR I:=1 TO 2 DO BEGIN C7[-I]:=C7[I]; S7[-I]:=-S7[I]; END;|39: PERTJUP; PERTSAT; PERTNEP; PERTJSU;|73: L:= 360.0*FRAC(0.4734843 + M7/P2 + ((5082.3+34.2*T)*T+DL)/1296.0E3 );|59: R:= 19.211991 + (-0.000333-0.000005*T)*T + DR*1.0E-5;|52: B:= (-130.61 + (-0.54+0.04*T)*T + DB ) / 3600.0;|21: END; (* URA200 *)|0:|75:(*-----------------------------------------------------------------------*)|75:(* NEP200: Neptune; ecliptic coordinates L,B,R (in deg and AU) *)|75:(* equinox of date *)|75:(* (T: time in Julian centuries since J2000) *)|75:(* ( = (JED-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE NEP200(T:REAL;VAR L,B,R:REAL);|23: CONST P2=6.283185307;|43: VAR C8,S8: ARRAY [ 0..6] OF REAL;|43: C,S: ARRAY [-6..0] OF REAL;|26: M5,M6,M7,M8: REAL;|26: U,V, DL,DR,DB: REAL;|17: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|47: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2; END;|0:|63: PROCEDURE TERM(I1,I,IT:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|9: BEGIN|54: IF IT=0 THEN ADDTHE(C8[I1],S8[I1],C[I],S[I],U,V)|44: ELSE BEGIN U:=U*T; V:=V*T END;|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|52: PROCEDURE PERTJUP; (* perturbations by Jupiter *)|9: BEGIN|60: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M5); S[-1]:=-SIN(M5);|50: ADDTHE(C[-1],S[-1],C[-1],S[-1],C[-2],S[-2]);|62: TERM(0,-1,0, 0.1, 0.1, -3.0, 1.8, -0.3, -0.3);|62: TERM(1, 0,0, 0.0, 0.0, -15.9, 9.0, 0.0, 0.0);|62: TERM(1,-1,0,-17.6, -29.3, 416.1,-250.0, 0.0, 0.0);|62: TERM(1,-2,0, -0.4, -0.7, 10.4, -6.2, 0.0, 0.0);|62: TERM(2,-1,0, -0.2, -0.4, 2.4, -1.4, 0.4, -0.3);|8: END;|0:|51: PROCEDURE PERTSAT; (* perturbations by Saturn *)|9: BEGIN|60: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M6); S[-1]:=-SIN(M6);|50: ADDTHE(C[-1],S[-1],C[-1],S[-1],C[-2],S[-2]);|62: TERM(0,-1,0, -0.1, 0.0, 0.2, -1.8, -0.1, -0.5);|62: TERM(1, 0,0, 0.0, 0.0, -8.3, -10.4, 0.0, 0.0);|62: TERM(1,-1,0, 13.6, -12.7, 187.5, 201.1, 0.0, 0.0);|62: TERM(1,-2,0, 0.4, -0.4, 4.5, 4.5, 0.0, 0.0);|62: TERM(2,-1,0, 0.4, -0.1, 1.7, -3.2, 0.2, 0.2);|62: TERM(2,-2,0, -0.1, 0.0, -0.2, 2.7, 0.0, 0.0);|8: END;|0:|68: PROCEDURE PERTURA; (* Kepler terms and perturbations by Uranus *)|19: VAR I: INTEGER;|9: BEGIN|60: C[0]:=1.0; S[0]:=0.0; C[-1]:=COS(M7); S[-1]:=-SIN(M7);|73: FOR I:=-1 DOWNTO -5 DO ADDTHE(C[I],S[I],C[-1],S[-1],C[I-1],S[I-1]);|62: TERM(1, 0,0, 32.3,3549.5,-25880.2, 235.8,-6360.5,374.0);|62: TERM(1, 0,1, 31.2, 34.4, -251.4, 227.4, 34.9, 29.3);|62: TERM(1, 0,2, -1.4, 3.9, -28.6, -10.1, 0.0, -0.9);|62: TERM(2, 0,0, 6.1, 68.0, -111.4, 2.0, -54.7, 3.7);|62: TERM(2, 0,1, 0.8, -0.2, -2.1, 2.0, -0.2, 0.8);|62: TERM(3, 0,0, 0.1, 1.0, -0.7, 0.0, -0.8, 0.1);|62: TERM(0,-1,0, -0.1, -0.3, -3.6, 0.0, 0.0, 0.0);|62: TERM(1, 0,0, 0.0, 0.0, 5.5, -6.9, 0.1, 0.0);|62: TERM(1,-1,0, -2.2, -1.6, -116.3, 163.6, 0.0, -0.1);|62: TERM(1,-2,0, 0.2, 0.1, -1.2, 0.4, 0.0, -0.1);|62: TERM(2,-1,0, 4.2, -1.1, -4.4, -34.6, -0.2, 0.1);|62: TERM(2,-2,0, 8.6, -2.9, -33.4, -97.0, 0.2, 0.1);|62: TERM(3,-1,0, 0.1, -0.2, 2.1, -1.2, 0.0, 0.1);|62: TERM(3,-2,0, -4.6, 9.3, 38.2, 19.8, 0.1, 0.1);|62: TERM(3,-3,0, -0.5, 1.7, 23.5, 7.0, 0.0, 0.0);|62: TERM(4,-2,0, 0.2, 0.8, 3.3, -1.5, -0.2, -0.1);|62: TERM(4,-3,0, 0.9, 1.7, 17.9, -9.1, -0.1, 0.0);|62: TERM(4,-4,0, -0.4, -0.4, -6.2, 4.8, 0.0, 0.0);|62: TERM(5,-3,0, -1.6, -0.5, -2.2, 7.0, 0.0, 0.0);|62: TERM(5,-4,0, -0.4, -0.1, -0.7, 5.5, 0.0, 0.0);|62: TERM(5,-5,0, 0.2, 0.0, 0.0, -3.5, 0.0, 0.0);|62: TERM(6,-4,0, -0.3, 0.2, 2.1, 2.7, 0.0, 0.0);|62: TERM(6,-5,0, 0.1, -0.1, -1.4, -1.4, 0.0, 0.0);|62: TERM(6,-6,0, -0.1, 0.1, 1.4, 0.7, 0.0, 0.0);|8: END;|0:|22: BEGIN (* NEP200 *) |30: DL:=0.0; DR:=0.0; DB:=0.0;|75: M5:=P2*FRAC(0.0563867+8.4298907*T); M6:=P2*FRAC(0.8825086+3.3957748*T);|75: M7:=P2*FRAC(0.3965358+1.1902851*T); M8:=P2*FRAC(0.7214906+0.6068526*T);|59: C8[0]:=1.0; S8[0]:=0.0; C8[1]:=COS(M8); S8[1]:=SIN(M8);|69: FOR I:=2 TO 6 DO ADDTHE(C8[I-1],S8[I-1],C8[1],S8[1],C8[I],S8[I]);|30: PERTJUP; PERTSAT; PERTURA;|73: L:= 360.0*FRAC(0.1254046 + M8/P2 + ((4982.8-21.3*T)*T+DL)/1296.0E3 );|60: R:= 30.072984 + (0.001234+0.000003*T) * T + DR*1.0E-5;|58: B:= ( 54.77 + ( 0.26 + 0.06*T) * T + DB ) / 3600.0;|21: END; (* NEP200 *)|0:|75:(*-----------------------------------------------------------------------*)|75:(* PLU200: Pluto; ecliptic coordinates L,B,R (in deg and AU) *)|75:(* equinox of date; only valid between 1890 and 2100!! *)|75:(* (T: time in Julian centuries since J2000) *)|75:(* ( = (JED-2451545.0)/36525 ) *)|75:(*-----------------------------------------------------------------------*)|40:PROCEDURE PLU200(T:REAL;VAR L,B,R:REAL);|0:|23: CONST P2=6.283185307;|38: VAR C9,S9: ARRAY [ 0..6] OF REAL;|38: C,S: ARRAY [-3..2] OF REAL;|21: M5,M6,M9: REAL;|21: DL,DR,DB: REAL;|24: I: INTEGER;|0:|29: FUNCTION FRAC(X:REAL):REAL;|63: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1.0; FRAC:=X END;|0:|51: PROCEDURE ADDTHE(C1,S1,C2,S2:REAL; VAR C,S:REAL);|47: BEGIN C:=C1*C2-S1*S2; S:=S1*C2+C1*S2; END;|0:|60: PROCEDURE TERM(I9,I:INTEGER;DLC,DLS,DRC,DRS,DBC,DBS:REAL);|18: VAR U,V: REAL;|9: BEGIN|42: ADDTHE(C9[I9],S9[I9],C[I],S[I],U,V);|65: DL:=DL+DLC*U+DLS*V; DR:=DR+DRC*U+DRS*V; DB:=DB+DBC*U+DBS*V;|8: END;|0:|69: PROCEDURE PERTJUP; (* Kepler terms and perturbations by Jupiter *)|19: VAR I: INTEGER;|9: BEGIN|58: C[0]:=1.0; S[0]:=0.0; C[1]:=COS(M5); S[1]:=SIN(M5);|71: FOR I:=0 DOWNTO -1 DO ADDTHE(C[I],S[I],C[1],-S[1],C[I-1],S[I-1]);|44: ADDTHE(C[1],S[1],C[1],S[1],C[2],S[2]);|72: TERM(1, 0, 0.06,100924.08,-960396.0,15965.1,51987.68,-24288.76);|72: TERM(2, 0,3274.74, 17835.12,-118252.2, 3632.4,12687.49, -6049.72);|72: TERM(3, 0,1543.52, 4631.99, -21446.6, 1167.0, 3504.00, -1853.10);|72: TERM(4, 0, 688.99, 1227.08, -4823.4, 213.5, 1048.19, -648.26);|72: TERM(5, 0, 242.27, 415.93, -1075.4, 140.6, 302.33, -209.76);|72: TERM(6, 0, 138.41, 110.91, -308.8, -55.3, 109.52, -93.82);|72: TERM(3,-1, -0.99, 5.06, -25.6, 19.8, 1.26, -1.96);|72: TERM(2,-1, 7.15, 5.61, -96.7, 57.2, 1.64, -2.16);|72: TERM(1,-1, 10.79, 23.13, -390.4, 236.4, -0.33, 0.86);|72: TERM(0, 1, -0.23, 4.43, 102.8, 63.2, 3.15, 0.34);|72: TERM(1, 1, -1.10, -0.92, 11.8, -2.3, 0.43, 0.14);|72: TERM(2, 1, 0.62, 0.84, 2.3, 0.7, 0.05, -0.04);|72: TERM(3, 1, -0.38, -0.45, 1.2, -0.8, 0.04, 0.05);|72: TERM(4, 1, 0.17, 0.25, 0.0, 0.2, -0.01, -0.01);|72: TERM(3,-2, 0.06, 0.07, -0.6, 0.3, 0.03, -0.03);|72: TERM(2,-2, 0.13, 0.20, -2.2, 1.5, 0.03, -0.07);|72: TERM(1,-2, 0.32, 0.49, -9.4, 5.7, -0.01, 0.03);|72: TERM(0,-2, -0.04, -0.07, 2.6, -1.5, 0.07, -0.02);|8: END;|0:|51: PROCEDURE PERTSAT; (* perturbations by Saturn *)|19: VAR I: INTEGER;|9: BEGIN|35: C[1]:=COS(M6); S[1]:=SIN(M6);|71: FOR I:=0 DOWNTO -1 DO ADDTHE(C[I],S[I],C[1],-S[1],C[I-1],S[I-1]);|72: TERM(1,-1, -29.47, 75.97, -106.4, -204.9, -40.71, -17.55);|72: TERM(0, 1, -13.88, 18.20, 42.6, -46.1, 1.13, 0.43);|72: TERM(1, 1, 5.81, -23.48, 15.0, -6.8, -7.48, 3.07);|72: TERM(2, 1, -10.27, 14.16, -7.9, 0.4, 2.43, -0.09);|72: TERM(3, 1, 6.86, -10.66, 7.3, -0.3, -2.25, 0.69);|72: TERM(2,-2, 4.32, 2.00, 0.0, -2.2, -0.24, 0.12);|72: TERM(1,-2, -5.04, -0.83, -9.2, -3.1, 0.79, -0.24);|72: TERM(0,-2, 4.25, 2.48, -5.9, -3.3, 0.58, 0.02);|8: END;|0:|63: PROCEDURE PERTJUS; (* perturbations by Jupiter and Saturn *)|22: VAR PHI,X,Y: REAL;|9: BEGIN|45: PHI:=(M5-M6); X:=COS(PHI); Y:=SIN(PHI);|69: DL:=DL-9.11*X+0.12*Y; DR:=DR-3.4*X-3.3*Y; DB:=DB+0.81*X+0.78*Y;|34: ADDTHE(X,Y,C9[1],S9[1],X,Y);|69: DL:=DL+5.92*X+0.25*Y; DR:=DR+2.3*X-3.8*Y; DB:=DB-0.67*X-0.51*Y;|8: END;|0:|75: PROCEDURE PREC(T:REAL;VAR L,B:REAL); (* precess. 1950->equinox of date *)|25: CONST DEG=57.2957795;|49: VAR D,PPI,PI,P,C1,S1,C2,S2,C3,S3,X,Y,Z: REAL;|9: BEGIN|35: D:=T+0.5; L:=L/DEG; B:=B/DEG;|60: PPI:=3.044; PI:=2.28E-4*D; P:=(0.0243764+5.39E-6*D)*D;|46: C1:=COS(PI); C2:=COS(B); C3:=COS(PPI-L);|46: S1:=SIN(PI); S2:=SIN(B); S3:=SIN(PPI-L);|53: X:=C2*C3; Y:=C1*C2*S3-S1*S2; Z:=S1*C2*S3+C1*S2;|53: B := DEG * ARCTAN( Z / SQRT((1.0-Z)*(1.0+Z)) );|57: IF (X>0) THEN L:=360.0*FRAC((PPI+P-ARCTAN(Y/X))/P2)|62: ELSE L:=360.0*FRAC((PPI+P-ARCTAN(Y/X))/P2+0.5);|8: END;|0:|21: BEGIN (* PLU200 *)|30: DL:=0.0; DR:=0.0; DB:=0.0;|75: M5:=P2*FRAC(0.0565314+8.4302963*T); M6:=P2*FRAC(0.8829867+3.3947688*T);|39: M9:=P2*FRAC(0.0385795+0.4026667*T);|60: C9[0]:=1.0; S9[0]:=0.0; C9[1]:=COS(M9); S9[1]:=SIN(M9);|69: FOR I:=2 TO 6 DO ADDTHE(C9[I-1],S9[I-1],C9[1],S9[1],C9[I],S9[I]);|30: PERTJUP; PERTSAT; PERTJUS;|54: L:= 360.0*FRAC( 0.6232469 + M9/P2 + DL/1296.0E3 );|35: R:= 40.7247248 + DR * 1.0E-5;|34: B:= -3.909434 + DB / 3600.0;|16: PREC(T,L,B);|21: END; (* PLU200 *)|75:(*-----------------------------------------------------------------------*)|75:(* *)|75:(* GEOCEN: geocentric coordinates (geometric and light-time corrected) *)|75:(* *)|75:(* T: time in Julian centuries since J2000 *)|75:(* T=(JD-2451545.0)/36525.0 *)|75:(* LP,BP,RP: ecliptic heliocentric coordinates of the planet *)|75:(* LS,BS,RS: ecliptic geocentric coordinates of the sun *)|75:(* *)|75:(* IPLAN: planet (0=Sun,1=Mercury,2=Venus,3=Earth,...,9=Pluto *)|75:(* IMODE: desired type of coordinates (see description of X,Y,Z) *)|75:(* (0=geometric,1=astrometric,2=apparent) *)|75:(* XP,YP,ZP: ecliptic heliocentric coordinates of the planet *)|75:(* XS,YS,ZS: ecliptic geocentric coordinates of the Sun *)|75:(* X, Y, Z : ecliptic geocentric cordinates of the planet (geometric *)|75:(* if IMODE=0, astrometric if IMODE=1, apparent if IMODE=2) *)|75:(* DELTA0: geocentric distance (geometric) *)|75:(* *)|75:(* (all angles in degrees, distances in AU) *)|75:(* *)|75:(*-----------------------------------------------------------------------*)|0:|67:PROCEDURE GEOCEN(T, LP,BP,RP, LS,BS,RS: REAL; IPLAN,IMODE: INTEGER;|61: VAR XP,YP,ZP, XS,YS,ZS, X,Y,Z,DELTA0: REAL);|0:|23: CONST P2=6.283185307;|0:|39: VAR DL,DB,DR, DLS,DBS,DRS, FAC: REAL;|39: VX,VY,VZ, VXS,VYS,VZS, M : REAL;|0:|29: FUNCTION FRAC(X:REAL):REAL;|61: BEGIN X:=X-TRUNC(X); IF (X<0) THEN X:=X+1; FRAC:=X END;|0:|66: PROCEDURE POSVEL(L,B,R,DL,DB,DR: REAL; VAR X,Y,Z,VX,VY,VZ:REAL);|27: VAR CL,SL,CB,SB: REAL;|9: BEGIN|49: CL:=CS(L); SL:=SN(L); CB:=CS(B); SB:=SN(B);|58: X := R*CL*CB; VX := DR*CL*CB-DL*R*SL*CB-DB*R*CL*SB;|58: Y := R*SL*CB; VY := DR*SL*CB+DL*R*CL*CB-DB*R*SL*SB;|55: Z := R*SB; VZ := DR*SB +DB*R*CB;|8: END;|7: BEGIN|60: DL:=0.0; DB:=0.0; DR:=0.0; DLS:=0.0; DBS:=0.0; DRS:=0.0;|21: IF (IMODE>0) THEN|11: BEGIN|73: M := P2*FRAC(0.9931266+ 99.9973604*T); (* Sun *)|67: DLS := 172.00+5.75*SIN(M); DRS := 2.87*COS(M); DBS := 0.0;|50: (* dl,db in 1e-4 rad/d, dr in 1e-4 AU/d *)|21: CASE IPLAN OF|73: 0: BEGIN DL:=0.0; DB:=0.0; DR:=0.0; END; (* Sun *)|73: 1: BEGIN (* Mercury *)|53: M := P2*FRAC(0.4855407+415.2014314*T);|71: DL := 714.00+292.66*COS(M)+71.96*COS(2*M)+18.16*COS(3*M)|63: +4.61*COS(4*M)+3.81*SIN(2*M)+2.43*SIN(3*M)|36: +1.08*SIN(4*M);|63: DR := 55.94*SIN(M)+11.36*SIN(2*M)+2.60*SIN(3*M);|63: DB := 73.40*COS(M)+29.82*COS(2*M)+10.22*COS(3*M)|63: +3.28*COS(4*M)-40.44*SIN(M)-16.55*SIN(2*M)|50: -5.56*SIN(3*M)-1.72*SIN(4*M);|17: END;|73: 2: BEGIN (* Venus *)|53: M := P2*FRAC(0.1400197+162.5494552*T);|61: DL := 280.00+3.79*COS(M); DR := 1.37*SIN(M);|46: DB := 9.54*COS(M)-13.57*SIN(M);|17: END;|73: 3: BEGIN DL:=DLS; DR:=DRS; DB:=-DBS; END; (* Earth *)|73: 4: BEGIN (* Mars *)|52: M := P2*FRAC(0.0538553+53.1662736*T);|54: DL := 91.50+17.07*COS(M)+2.03*COS(2*M);|48: DR := 12.98*SIN(M)+1.21*COS(2*M);|46: DB := 0.83*COS(M)+2.80*SIN(M);|17: END;|73: 5: BEGIN (* Jupiter *)|51: M := P2*FRAC(0.0565314+8.4302963*T);|73: DL := 14.50+1.41*COS(M); DR:=3.66*SIN(M); DB:=0.33*SIN(M);|17: END;|73: 6: BEGIN (* Saturn *)|51: M := P2*FRAC(0.8829867+3.3947688*T);|72: DL := 5.84+0.65*COS(M); DR:=3.09*SIN(M); DB:=0.24*COS(M);|17: END;|73: 7: BEGIN (* Uranus *)|51: M := P2*FRAC(0.3967117+1.1902849*T);|73: DL := 2.05+0.19*COS(M); DR:=1.86*SIN(M); DB:=-0.03*SIN(M);|17: END;|73: 8: BEGIN (* Neptune *)|51: M := P2*FRAC(0.7214906+0.6068526*T);|72: DL := 1.04+0.02*COS(M); DR:=0.27*SIN(M); DB:=0.03*SIN(M);|17: END;|73: 9: BEGIN (* Pluto *)|51: M := P2*FRAC(0.0385795+0.4026667*T);|66: DL := 0.69+0.34*COS(M)+0.12*COS(2*M)+0.05*COS(3*M);|47: DR := 6.66*SIN(M)+1.64*SIN(2*M);|60: DB := -0.08*COS(M)-0.17*SIN(M)-0.09*SIN(2*M);|17: END;|12: END;|10: END;|55: POSVEL (LS,BS,RS,DLS,DBS,DRS,XS,YS,ZS,VXS,VYS,VZS);|55: POSVEL (LP,BP,RP,DL ,DB ,DR, XP,YP,ZP,VX ,VY ,VZ );|66: X:=XP+XS; Y:=YP+YS; Z:=ZP+ZS; DELTA0 := SQRT(X*X+Y*Y+Z*Z);|66: IF IPLAN=3 THEN BEGIN X:=0.0; Y:=0.0; Z:=0.0; DELTA0:=0.0 END;|35: FAC := 0.00578 * DELTA0 * 1E-4;|17: CASE IMODE OF|60: 1: BEGIN X:=X-FAC*VX; Y:=Y-FAC*VY; Z:=Z-FAC*VZ; END;|75: 2: BEGIN X:=X-FAC*(VX+VXS); Y:=Y-FAC*(VY+VYS); Z:=Z-FAC*(VZ+VZS);END;|9: END;|6: END;|0:|60:PROCEDURE THiAsmClass.doPLANPOS(var Data:TData; index:word);|3:VAR|35: HStr,MStr,SStr,h0,m0,s0:STRING;|17: H1 : INTEGER;|0:|19:BEGIN (* PLANPOS *)|54: MODE_Read := ReadString(Data,Coordinates_mode,'');|60: IF (MODE_Read ='A') OR (MODE_Read ='a') THEN MODE :='A';|60: IF (MODE_Read ='J') OR (MODE_Read ='j') THEN MODE :='J';|60: IF (MODE_Read ='B') OR (MODE_Read ='b') THEN MODE :='B';|46: IF MODE IN ['A','a','J','j','B','b'] THEN|11: BEGIN|23: (* read date *)|43: YEAR := ReadInteger(Data,YEAR_,0);|44: MONTH := ReadInteger(Data,MONTH_,0);|42: DAY := ReadInteger(Data,DAY_,0);|40: HOUR := ReadReal(Data,HOUR_,0);|44: MODJD := MJD (DAY,MONTH,YEAR,HOUR); |35: T:=(MODJD-51544.5)/36525.0;|57: (* ecliptic coordinates of the sun, Equinox T *)|28: SUN200 (T,LS,BS,RS);|73: (* planetary coordinates; include Pluto between 1890 and 2100 *)|57: IF ( (-1.1 10) THEN h0 :='-'|17: else|39: if (H < 10) THEN h0 :=' 0'|17: else|22: h0 :=' ';|38: if (M < 10) THEN m0 :='0'|17: else|21: m0 :='';|38: if (S < 10) THEN s0 :='0'|17: else|21: s0 :='';|59: Str(H1, HStr); Str(M, MStr); Str(S:0:2, SStr);|86: _hi_OnEvent(onDEdms,h0+HStr+'° '+m0+MStr+''' '+s0+SStr+'"'); |35: _hi_OnEvent(onPLANPOS);|14: END;|10: END;|7: END;|0:|55:PROCEDURE THiAsmClass.PLAN(var Data:TData; index:word);|5:BEGIN|29: Data.data_type := data_str;|23: data.sdata := IPLAN_;|4:END;|0:|55:PROCEDURE THiAsmClass.Ldeg(var Data:TData; index:word);|5:BEGIN|30: Data.Data_type := data_real;|18: data.rdata := L;|4:END;|0:|55:PROCEDURE THiAsmClass.Bdeg(var Data:TData; index:word);|5:BEGIN|30: Data.Data_type := data_real;|18: data.rdata := B;|4:END;|3: |54:PROCEDURE THiAsmClass.Rae(var Data:TData; index:word);|5:BEGIN|30: Data.Data_type := data_real;|18: data.rdata := R;|4:END;|0:|56:PROCEDURE THiAsmClass.RAdeg(var Data:TData; index:word);|5:BEGIN|30: Data.Data_type := data_real;|19: data.rdata := RA;|4:END;|0:|56:PROCEDURE THiAsmClass.DEdeg(var Data:TData; index:word);|5:BEGIN|30: Data.Data_type := data_real;|20: data.rdata := DEC;|4:END;|0:|58:PROCEDURE THiAsmClass.DELTAae(var Data:TData; index:word);|5:BEGIN|30: Data.Data_type := data_real;|22: data.rdata := DELTA;|4:END;|3: |4:END.| link(Coordinates_mode,8845012:EditText,[]) link(YEAR_,2247152:Year,[]) link(MONTH_,2247152:Month,[]) link(DAY_,2247152:Day,[]) link(HOUR_,10588397:Result,[(321,181)(335,181)]) link(onRAhms,9464814:doValue,[]) link(onDEdms,12089675:doValue,[]) link(onPLANPOS,8830872:doString,[(347,216)(347,237)(281,237)(281,265)]) } Add(FormatStr,8830872,287,259) { DataCount=9 Mask="%1;%2;%3;%4;%5;%6;%7;%8;%9;" link(onFString,13247755:doAdd,[]) link(Str1,1777369:PLAN,[]) link(Str2,1777369:Ldeg,[]) link(Str3,1777369:Bdeg,[]) link(Str4,1777369:Rae,[]) link(Str5,1777369:RAdeg,[]) link(Str6,1777369:DEdeg,[]) link(Str7,1777369:DELTAae,[]) link(Str8,9464814:Value,[(342,251)(405,251)]) link(Str9,12089675:Value,[(349,240)(363,240)]) } Add(LineBreak,2674453,364,266) { Caption="Clear" link(Out,13247755:doClear,[]) Primary=[95878,-210,-91] } Add(Button,5558200,14,175) { Left=5 Top=5 Width=105 Caption="Пауза" link(onClick,15630571:doStop,[(58,181)(58,146)]) } Add(Time,2400785,147,91) { Point(DateTime) } Add(Button,15620218,14,91) { Left=110 Top=5 Width=95 Caption="Продолжить" link(onClick,1020808:doWork1,[(53,97)]) } Add(DoData,15450283,154,133) { link(onEventData,5613093:doOperation,[]) link(Data,2400785:DateTime,[]) } Add(Timer,15630571,70,133) { Interval=20 link(onTimer,1604298:doEvent1,[]) } Add(MathParse,10588397,329,133) { DataCount=1 MathStr="frac(frac((%1)*24))" } Add(DateConvertor,2247152,294,140) { Point(Year) Point(Month) Point(Day) } Add(Hub,1604298,119,133) { OutCount=5 link(onEvent1,15450283:doData,[]) link(onEvent2,95878:In,[(147,146)(147,181)]) link(onEvent3,1777369:doPLANPOS,[(142,153)(142,202)]) } Add(StringTableMT,13247755,413,259) { Top=75 Width=905 Height=185 Font=[MS Sans Serif,8,0,0,204] DoubleBuffered=0 Columns=#7:PLAN=55|8:Ldeg=110|8:Bdeg=110|7:Rae=110|9:RAdeg=110|9:DEdeg=110|11:DELTAae=110|8:RAhms=90|8:DEdms=90| Redaction=0 Grid=0 TextColor=0 TextBkColor=12632256 BkColor=12632256 IconsCheck=[] MiscIcons=[] Icons=[] } Add(Memory,12089675,357,203) { } Add(Math,5613093,196,133) { @Hint=#43:Коррекция на 3 часа для Московского времени| Op2=0.125 link(onResult,10579958:doEvent1,[]) AddHint(-75,78,144,26,@Hint) } Add(Memory,9464814,399,196) { } Add(Hub,10579958,238,133) { link(onEvent1,10588397:doCalc,[]) link(onEvent2,2247152:doConvert,[]) } Add(Label,14955449,105,91) { Left=385 Top=45 Width=510 Height=20 Ctl3D=0 WinStyle=3 Caption="Геоцентрические координаты" AutoSize=1 Alignment=2 } Add(Label,8507052,63,91) { Top=45 Width=388 Height=20 Ctl3D=0 WinStyle=3 Caption="Гелиоцентрические координаты" AutoSize=1 Alignment=2 } Add(ComboBox,8845012,266,84) { Left=210 Top=5 Height=21 Strings=#1:A|1:J|1:B| Text="A" Point(Text) Point(EditText) } Add(Label,4396473,329,91) { Left=270 Top=10 Width=613 Height=17 Caption="Координаты с учётом точек равноденствия, B-на момент 1950г, J-на 2000г, A-видимые координаты на текущий момент" } Add(HubEx,1020808,49,133) { link(onEvent,15630571:doTimer,[]) } Add(Label,11799156,14,217) { Top=270 Width=374 Height=17 Caption="Rae - Растояние от планеты до Солнца в астрономических еденицах a.e." } Add(Label,14825651,14,252) { Top=285 Caption="DELTAae - Растояние от Земли до планеты в астрономических еденицах a.e." }