10 REM 3BODLIFE.BAS     9-17-00 DRC REVISED 4-7-03
20 REM PLOTS BODIES 1,2,AND 3
30 REM RECORDS YR,PER(3) AND LIFETIME TO ESCAPE
35 REM RECORDS DATA EVERY 10 YEARS ONLY- SEE "DI" AT END OF PROGRAM
38 REM TURN PRINTER ON
REM CAP "B"--BREAK    F5---CONTINUE
40 CLS : SCREEN 12: KEY OFF    'NOTE SCREEN NUMBER
50 C(1) = 2: C(2) = 1: C(3) = 4
60 X0 = 320: Y0 = 240: XYR = -1       'NOTE FULL SCREEN 640 X 480
70 REM LABELS FOR BODIES 1,2,AND 3
80 REM MASS,DISTANCE,INIT. VEL.
M(1) = 500: M(2) = 50: M(3) = 1
X(1) = -2: X(2) = 20: X(3) = 200
VY(1) = -1.2: VY(2) = 4.3: VY(3) = 1
160 VX(1) = 0
170 VX(2) = 0
180 VX(3) = 0
182 REM LPRINT LABELS
183 REM LPRINT "M1="; M(1); "M2="; M(2); "M3="; M(3)
185 REM LPRINT "X1="; X(1); "X2="; X(2); "X3="; X(3)
187 REM LPRINT "VY1="; VY(1); "VY2="; VY(2); "VY3="; VY(3)
188 REM LPRINT "DATE:"; MM; DD; YY
190 REM FIX CENTER OF MASS
200 T = 0: M = 0
210 FOR I = 1 TO 3
220   T = T + M(I) * VY(I)
230   M = M + M(I)
240 NEXT I
250 TT = T / M
260 REM PRINT LABELS
270 CLS
275 REM LPRINT "YR "; " PER(3) "; " P(3)AV  "; "  V(3)AV "; " V(3)MAX "; " V(3)MIN "; "   DVA ";   REM CPF "
280 LOCATE 1, 55: PRINT "BODY  "; "MASS  "; "X  "; "VY"
290 LOCATE 2, 57: PRINT "1  "; M(1); X(1); ; VY(1)
300 LOCATE 3, 57: PRINT "2  "; M(2); X(2); VY(2)
310 LOCATE 4, 57: PRINT "3  "; M(3); X(3); VY(3)
312 LOCATE 5, 57: PRINT "DATE: "; MM; DD; YY
320 FOR I = 1 TO 3
330  VY(I) = VY(I) - TT
340 NEXT I
FOR I = 1 TO 3
MXT = MXT + M(I) * X(I)
NEXT I
XCG = MXT / M
REM X1,X2,X3 CORR. FOR XCG
FOR I = 1 TO 3
X(I) = X(I) - XCG
NEXT I
REM X0 & Y0 CORR. CORRECTED FOR XCG
350 LINE (X0 - 50, Y0)-(X0 + 50, Y0), 7
360 LINE (X0, Y0 - 50)-(X0, Y0 + 50), 7

                                                                                             Page 1

            REM START OF MAIN LOOP

    REM R1 IS DISTANCE FROM 1 TO 2,R2: 2 TO 3, R3: 3 TO 1
390 R1 = ((X(1) - X(2)) ^ 2 + (Y(1) - Y(2)) ^ 2) ^ 1.5
 R2 = ((X(2) - X(3)) ^ 2 + (Y(2) - Y(3)) ^ 2) ^ 1.5
 R3 = ((X(3) - X(1)) ^ 2 + (Y(3) - Y(1)) ^ 2) ^ 1.5
 FOR I = 1 TO 3
   PSET (X0 + X(I), Y0 - Y(I)), C(I)
 NEXT I
 VX(1) = VX(1) - (X(1) - X(2)) * M(2) / R1 - (X(1) - X(3)) * M(3) / R3
 VY(1) = VY(1) - (Y(1) - Y(2)) * M(2) / R1 - (Y(1) - Y(3)) * M(3) / R3
 VX(2) = VX(2) - (X(2) - X(3)) * M(3) / R2 - (X(2) - X(1)) * M(1) / R1
 VY(2) = VY(2) - (Y(2) - Y(3)) * M(3) / R2 - (Y(2) - Y(1)) * M(1) / R1
 VX(3) = VX(3) - (X(3) - X(1)) * M(1) / R3 - (X(3) - X(2)) * M(2) / R2
 VY(3) = VY(3) - (Y(3) - Y(1)) * M(1) / R3 - (Y(3) - Y(2)) * M(2) / R2
 FOR I = 1 TO 3
   X(I) = X(I) + VX(I)
   Y(I) = Y(I) + VY(I)
   PSET (X0 + X(I), Y0 - Y(I)), 7
   NEXT I
   CT = CT + 1
   V3 = SQR(VX(3) ^ 2 + VY(3) ^ 2): A = A + V3
 LOCATE 2, 1: PRINT "V3="; CINT(V3 * 1000) / 1000
 IF X0 + X(2) < 40 OR X0 + X(2) > 600 OR Y0 - Y(2) < 0 OR Y0 + Y(2) > 470 THEN STOP
 IF Y(3) < 0 THEN SB = 0
 IF Y(3) > 0 AND SB = 0 THEN 690
 A$ = INKEY$: IF A$ = "B" THEN STOP
 IF A$ = "S" THEN SLEEP 2
 GOTO 390
690 SB = 1: XYR = XYR + 1
 PX = CT - TA
 TA = CT
 REM IF XYR = 1 THEN STOP
 IF XYR > 0 THEN LOCATE 1, 1: PRINT "PER(3)"; PX; " YR"; XYR
 IF XYR > 0 THEN LOCATE 28, 1: PRINT "YR"; XYR
 REM IF XYR > 0 AND DI = 1 THEN LPRINT XYR; "  "; PX; "  "; PAV; "  "; VAV; "  "; VX; "  "; VN; "  REM ; DVA; "  "; CPF: DI = 0
 IF XYR > 2 THEN AV = CINT(A / CT * 1000) / 1000
 LOCATE 3, 1: PRINT "V3(AV)="; AV
 GOTO 390




                                                                                                 Page 2
