home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
basic
/
astrmenu.lbr
/
KEPLER.BZS
/
KEPLER.BAS
Wrap
BASIC Source File
|
1987-04-26
|
2KB
|
91 lines
1 PRINT "From the August 1985 SKY & TELESCOPE, pp. 158-9."
2 PRINT
3 PRINT "This program solves Kepler's equation in orbit computation to compute"
4 PRINT "an ephemeris for a comet or asteroid from its orbital elements."
5 PRINT
6 PRINT "INPUT: Perhelion distance (AU), eccentricity, days from perihelion."
7 PRINT
8 PRINT "OUTPUT: True anomaly (degrees), distance from the sun (AU)."
9 PRINT
10 REM KEPLER'S EQUATION
11 REM
12 P1=3.14159265#: R1=180/P1
13 K=.01720209895#
14 INPUT "PERI DISTANCE Q ";Q
15 INPUT "ECCENTRICITY ";E0
16 INPUT "DAYS FROM PERI ";T
17 PRINT
18 IF E0>=.95 THEN 40
19 IF E0>=1 THEN 85
20 A1=Q/(1-E0): M=K*T*A1^(-1.5)
21 REM
22 REM BINARY SEARCH
23 REM
24 F=SGN(M): M=ABS(M)/(2*P1)
25 M=(M-INT(M))*2*P1*F
26 IF M<0 THEN M=M+2*P1
27 F=1: IF M>P1 THEN F=-1
28 IF M>P1 THEN M=2*P1-M
29 E=P1/2: D=P1/4
30 FOR I1=1 TO 23
31 M1=E-E0*SIN(E)
32 E=E+SGN(M-M1)*D: D=D/2
33 NEXT I1
34 V=SQR((1+E0)/(1-E0)): E=E*F
35 V=2*ATN(V*SIN(E/2)/COS(E/2))
36 R=A1*(1-E0*COS(E))
37 PRINT "BINARY SEARCH -- "
38 GOTO 81
39 REM
40 REM GAUSS METHOD
41 REM
42 GOSUB 69
43 A=SQR((1+9*E0)/10)
44 B=5*(1-E0)/(1+9*E0)
45 C=SQR(5*(1+E0)/(1+9*E0))
46 B1=3*A*K*T/SQR(2*Q*Q*Q)
47 B2=1: REM INITIAL VALUE
48 W1=B2*B1: B3=ATN(2/W1)
49 T1=SIN(B3/2)/COS(B3/2)
50 S1=SGN(T1): T1=ABS(T1)
51 T2=T1^(1/3)*S1: G=ATN(T2)
52 S=2*COS(2*G)/SIN(2*G)
53 A2=B*S*S: B0=B2: B2=0
54 IF ABS(A2)>.3 THEN 19
55 FOR J=0 TO 7
56 B2=B2+B(J)*A2^J
57 NEXT J
58 IF ABS(B2-B0)>1E-08 THEN 48
59 C1=0
60 FOR J=0 TO 7
61 C1=C1+S(J)*A2^J
62 NEXT J
63 C1=SQR(1/C1)
64 V1=C*C1*S: D1=1/(1+A2*C1*C1)
65 V=2*ATN(V1): R=Q*D1*(1+V1*V1)
66 PRINT "GAUSS METHOD --"
67 GOTO 81
68 REM
69 REM COEFFICIENTS
70 FOR J=0 TO 7: READ B(J): NEXT
71 FOR J=0 TO 7: READ S(J): NEXT
72 RETURN
73 DATA 1, 0, -0.017142857
74 DATA -0.003809524,-0.001104267
75 DATA -0.000367358,-0.000131675
76 DATA -0.000049577, 1, -0.8
77 DATA 0.04571429, 0.01523810
78 DATA 0.00562820, 0.00218783
79 DATA 0.00087905, 0.00036155
80 REM
81 IF V<0 THEN V=V+2*P1
82 PRINT "TRUE ANOMALY: ";V*R1
83 PRINT "DISTANCE (AU): ";R
84 GOTO 86
85 PRINT "OUT OF RANGE"
86 RUN"ASTRMENU.BAS"
*P1
82 PRINT "TRUE ANOMALY: ";V*R1
83 PRINT "DISTANCE (AU): ";R
84 GOTO 86
85 PRINT "OUT OF RANG