10 REM Rigorous Precession 20 REM (J2000.0) 30 DEFDBL A-Z 40 Q1$="## ## ##.###" 50 Q2$="## ## ##.##" 60 Q3$="##.####": Q4$="##.###" 70 P1=4#*ATN(1#): R1=P1/180# 80 E0=2000#: A$="A" 90 CLS 100 INPUT "Initial epoch (yr)";IE 110 INPUT "Final epoch (yr) ";FE 120 IF ABS(IE-FE)<=500 THEN 150 130 PRINT "Time span too long" 140 GOTO 110 150 CLS: GOSUB 660 155 IF A$="n" OR A$="N" THEN 210 160 PRINT "Initial epoch ";IE 170 PRINT " R.A. (h,m,s)"; 180 GOSUB 530: A=V 190 PRINT " Dec. (d,m,s)"; 200 GOSUB 530: D=V 210 MA=0: MD=0: GOSUB 970 220 A2=A1: D2=D1 225 IF A$="n" OR A$="N" THEN 270 230 PRINT "Proper motion in" 240 INPUT " R.A. (sec/yr) ";M1 250 INPUT " Dec. (arcsec/yr)";M2 260 PRINT 270 MA=M1: MD=M2: GOSUB 970 280 V=A1: GOSUB 590 290 PRINT "Final epoch ";FE 300 PRINT " R.A. (h,m,s): "; 310 PRINT USING Q1$;V1;V2;V3 320 V=D1: GOSUB 590 330 PRINT " Dec. (d,m,s): ";S$; 340 PRINT USING Q2$;V1;V2;V3 350 A3=(A1-A2)*3600/NY 360 D3=(D1-D2)*3600/NY 370 PRINT "Proper motion in" 380 PRINT " R.A. (sec/yr): "; 390 PRINT USING Q3$;A3 400 PRINT " Dec. (arcsec/yr):"; 410 PRINT USING Q4$;D3 420 PRINT 430 PRINT "Select one:" 440 PRINT " (A)nother star" 450 PRINT " (N)ew final epoch" 460 PRINT " (Q)uit" 470 INPUT A$ 480 IF A$="a" OR A$="A" THEN 150 490 IF A$="n" OR A$="N" THEN 110 500 IF A$="q" OR A$="Q" THEN 520 510 GOTO 470 520 END 530 REM INPUT SEXAGESIMAL 540 S=1: INPUT V$,V2,V3 550 IF LEFT$(V$,1)="-" THEN S=-1 560 V1=ABS(VAL(V$)) 570 V=S*(V1+V2/60+V3/3600) 580 RETURN 590 REM OUTPUT SEXAGESIMAL 600 S$="+": IF V<0 THEN S$="-" 610 V=ABS(V): V1=INT(V) 620 VM=60*(V-V1): V2=INT(VM) 630 V3=60*(VM-V2) 640 RETURN 650 REM 660 REM Precession parameters 670 NY=FE-IE 680 T0=(IE-E0)/100: T1=NY/100 690 T2=T1*T1: T3=T1*T1*T1 700 H1=2306.2181#: H2=1.39656 710 H3=-0.000139: H4=0.30188 720 H5=-0.000345: H6=0.017998 730 K1=1.09468: K2=0.000066 740 K3=0.018203 750 L1=2004.3109#: L2=-0.8533 760 L3=-0.000217: L4=-0.42665 770 L5=-0.000217: L6=-0.041833 780 W= (H1 +H2*T0 +H3*T0*T0)*T1 790 ZT= W +(H4 +H5*T0)*T2 +H6*T3 800 ZD= W +(K1 +K2*T0)*T2 +K3*T3 810 TH= (L1 +L2*T0 +L3*T0*T0)*T1 820 TH= TH+(L4 +L5*T0)*T2 +L6*T3 830 ZT=ZT*R1/3600: ZD=ZD*R1/3600 840 TH=TH*R1/3600 850 REM ZT,ZD,TH = Euler angles 860 REM 870 REM Rotation matrix 880 S1=SIN(ZT): C1=COS(ZT) 890 S2=SIN(ZD): C2=COS(ZD) 900 S3=SIN(TH): C3=COS(TH) 910 XX=C1*C3*C2-S1*S2 920 YX=-S1*C3*C2-C1*S2: ZX=-S3*C2 930 XY=C1*C3*S2+S1*C2 940 YY=-S1*C3*S2+C1*C2: ZY=-S3*S2 950 XZ=C1*S3: YZ=-S1*S3: ZZ=C3 960 RETURN 970 REM Proper-motion correction 980 A0=(A+MA*NY/3600)*15*R1 990 D0=(D+MD*NY/3600)*R1 1000 REM 1010 REM Spherical--> rectangular 1020 SA=SIN(A0): CA=COS(A0) 1030 SD=SIN(D0): CD=COS(D0) 1040 X0=CA*CD: Y0=SA*CD: Z0=SD 1050 REM 3-D transformation 1060 X1=X0*XX+Y0*YX+Z0*ZX 1070 Y1=X0*XY+Y0*YY+Z0*ZY 1080 Z1=X0*XZ+Y0*YZ+Z0*ZZ 1090 REM Rectangular--> spherical 1100 A1=ATN(Y1/X1) 1110 IF X1<0 THEN A1=A1+P1 1120 IF A1<0 THEN A1=A1+2*P1 1130 A1=A1/(R1*15): REM Final R.A. 1140 D1=ATN(Z1/SQR(X1*X1+Y1*Y1)) 1150 D1=D1/R1: REM Final Dec. 1160 RETURN 2000 REM 2010 REM This program for pre- 2020 REM cessing a star's coor- 2030 REM dinates is described in 2040 REM Sky & Telescope for 2050 REM October, 1991, page 408. 2060 REM It was written by 2070 REM Zbigniew S. Krzeminski.