DECLARE SUB Pict2 () DECLARE SUB Pict3 () DECLARE SUB askit (I5!) DECLARE SUB Example () DECLARE SUB Pict1 () DECLARE SUB FILLIT (NCHAR!, A$(), FILL$) DECLARE SUB Globe () DECLARE SUB PRINTIT (NCHAR!, A$(), J!, EQ$) DECLARE SUB Pager () pi = 4! * ATN(1!) 10 t2 = 20! REM T2 is time update in seconds for export of data. REM 20 DIM xp(1000), yp(1000) 30 REM CURVED EARTH PROBLEM 40 PRINT CHR$(12); 50 REM ^^^^^^^^^^^PRINT LESSON^^^^^^^^^^^^^ CALL Pict1 CALL Pager CALL Globe CALL Pager CALL Pict2 CALL Pager CALL Pict3 CALL Pager 770 REM ^^^^^^^*INPUT ROUTINE^^^^^^^^^^^^^ REM PRINT " I N P U T R O U T I N E " PRINT "DO YOU WANT AN EXAMPLE OF INPUT PARAMETERS THAT WILL WORK HERE?" INPUT Ans$ IF LEFT$(Ans$, 1) = "N" OR LEFT$(Ans$, 1) = "n" THEN GOTO 800 ELSE CALL Example END IF PRINT "Use the stored V2 rocket data? - Yes or No" INPUT anv2$ IF LEFT$(anv2$, 1) = "Y" OR LEFT$(anv2$, 1) = "y" THEN w0 = 27000 w1 = 19200 t9 = 64 T0 = 1 F0 = 55000 s9 = 4.9 ^ 2 * pi / 4 O = 57! GOTO 990 ELSE END IF 800 PRINT "Input the weight of the rocket (LB)"; 840 INPUT w0 850 PRINT "Input the weight of the fuel(LB)"; 860 INPUT w1 870 IF w1 > w0 THEN GOTO 1140 880 PRINT "Input the burn time of the rocket (SEC)"; 890 INPUT t9 900 T0 = 1! 910 PRINT "Input the ROCKET-ENGINE THRUST in POUNDS FORCE"; 920 INPUT F0 930 IF F0 < w0 THEN GOTO 1160 940 PRINT "Input the maximum TRANSERSE ROCKET AREA (FT^2)"; 950 INPUT s9 960 IF F0 > 5! * w0 THEN GOTO 980 970 GOTO 990 980 t2 = 2! * t2 990 G0 = 32.2 1000 E0 = 2! * pi / (24! * 3600!) 1010 M1 = (w1 / G0) / t9 1020 M0 = w0 / G0 + .5 * M1 * T0 1030 M = M0 1040 R0 = 3963! * 5280! 1050 G = G0 * R0 * R0 1060 PRINT "The INERTIAL GUIDANCE SYSTEM aims THRUST VECTOR at an angle " 1070 PRINT "measured down from the local horizon." 1080 PRINT "Select the angle in degrees"; 1090 INPUT O 1100 IF O < 1 THEN GOTO 1160 1110 O = O * pi / 180! 1120 C0 = COS(O) 1130 S0 = SIN(O) 1135 GOTO 1180 1140 PRINT "S T U P I D Fuel mass > rocket mass!!!" 1150 GOTO 800 1160 PRINT " It will never fly....MUST BE VANGUARD - a real dud!" 1170 GOTO 800 1180 PRINT "We neglect YAW AND PITCH." PRINT " The output delta Time is set to "; t2; " sec" PRINT "Change or Use? " INPUT askt$ IF LEFT$(askt$, 1) = "C" OR LEFT$(askt$, 1) = "c" THEN PRINT "Input a new Delta t in sec."; INPUT t2 ELSE END IF 1185 REM ^^^^^^^^*INITIALIZATION PROCEDURE^^^^^^^^^^* 1190 T = 0 R(1) = 0 R(2) = 0 v(1) = 0 v(2) = 0 v = 0 Y = 0 1200 R(1) = R0 X1 = R0 1210 R(2) = 0 X2 = 0 1220 v(1) = -E0 * R(2) 1230 v(2) = E0 * R(1) 1240 R = R0 1250 R2 = R0 * R0 1260 R3 = R * R2 1270 Y = R - R0 1280 A(2) = -G0 1290 REM COMPUTE W &RELATIVE VELOCITY MAG =U 1300 W(1) = -E0 * R(2) 1310 W(2) = E0 * R(1) 1320 U = SQR((v(1) - W(1)) ^ 2 + (v(2) - W(2)) ^ 2) 1330 CALL Pager 1340 CALL askit(I5) 1350 GOSUB 2290 1360 REM ^^^^^^^^^^ OUTPUT ^^^^^^^^^^^ 1370 IF R < R0 THEN GOTO 1460 1380 IF T > 4500! THEN PRINT " TIME RAN OUT AT 4500 SEC."; "" 1381 IF T > 4500! THEN STOP 1390 IF T > 4500! THEN GOTO 1460 1395 IF p3 = 1000! THEN PRINT "TOO MUCH DATA GENERATED."; "" 1397 IF p3 = 1000 THEN GOTO 1460 1400 p3 = p3 + 1 1410 IF I5 <> 1 THEN GOTO 1430 vsp = SQR(v(1) ^ 2 + v(2) ^ 2) vsp = vsp / 5280! 1420 PRINT USING "#########.##### "; T; R - R0; v(1); v(2); vsp 1430 xp(p3) = R(1) 1440 yp(p3) = R(2) 1450 GOTO 1350 1460 D = SQR((R(1) - X1) ^ 2 + (R(2) - X2) ^ 2) 1470 A = ATN(D / SQR(4! * R0 * R0 - D * D)) 1480 Z = (2 * A - E0 * T) * R0 / 5280! 1490 PRINT "Range on EARTH ="; Z; " MILES" 1500 I4 = 0 1503 PRINT "Do you want to plot the data ? "; 1506 INPUT A3$ 1509 IF A3$ = "NO" OR A3$ = "no" THEN STOP 1540 GOSUB 2960 2290 REM ^^^^^^^CALCULATIONS SUBROUTINE^^^^^^^^^^* 2300 REM RELATIVE ATMOSPHERIC DENSITY (Y IN FT ABOVE R0) 2310 FOR J = 1 TO t2 2320 IF Y < 1000000! THEN GOTO 2360 2340 F1 = 0 2350 GOTO 2400 2360 IF Y > 30000! THEN GOTO 2390 2370 F1 = EXP(-.0000311 * Y) 2380 GOTO 2400 2390 F1 = 1.6144 * EXP(-4.771E-05 * Y) 2400 REM MACH NUMBER M9 FOR DRAG COEFFICIENT 2410 M9 = U / 1043! 2420 REM COMPUT DRAG COEFFICIET C 2430 IF M9 > .89 THEN GOTO 2460 2440 C = .1 2450 GOTO 2500 2460 IF M9 > 1.13 THEN GOTO 2490 2470 C = -1! + 1.231 * M9 2480 GOTO 2500 2490 C = .141 + .129 / SQR(M9 * M9 - 1!) 2500 REM EQUATIONS OF MOTION NEXT :::::::::::::::::::::::::::::::::::::: 2510 FOR i = 1 TO 2 2520 A(i) = -(G / R3) * R(i) 2530 NEXT i 2540 IF T > t9 THEN GOTO 2580 2550 M = M - M1 * T0 2560 A(1) = A(1) + (R(1) * S0 - R(2) * C0) * F0 / (M * R) 2570 A(2) = A(2) + (R(2) * S0 + R(1) * C0) * F0 / (M * R) 2580 FOR i = 1 TO 2 2590 A(i) = A(i) - .001189 * C * F1 * s9 * U * (v(i) - W(i)) / M 2600 R(i) = R(i) + v(i) * T0 + .5 * A(i) * T0 * T0 2610 v(i) = v(i) + A(i) + T0 2620 NEXT i 2630 REM ^^^^^^INCREMENT TIME,UPDATE Y,V OUTPUT RESULTS 2640 IF T < .1 THEN GOTO 2660 2650 GOTO 2670 2660 PRINT "BLAST-OFF!!" 2670 T = T + T0 2680 IF t9 = INT(T + .5) THEN GOTO 2700 2690 GOTO 2710 2700 PRINT "^^^^^1 ST STAGE SHUT DOWN^^^^^*" 2710 R2 = R(1) * R(1) + R(2) * R(2) 2720 R = SQR(R2) 2730 R3 = R * R2 2740 Y = R - R0 2750 IF Y > 30000 THEN GOTO 2770 2760 GOTO 2860 2770 IF Y < 32000 THEN GOTO 2790 2780 GOTO 2860 2790 IF v(1) > 0 THEN GOTO 2810 2800 GOTO 2845 2810 IF U1 = 1 THEN GOTO 2860 2820 PRINT "PASSING 30,000 FT. GOING UP^" 2830 U1 = 1 2840 GOTO 2860 2845 IF U2 = 1 THEN GOTO 2860 2850 PRINT "PASSING 30,000 FT. GOING DOWN" 2855 U2 = 1 2860 v = SQR(v(1) * v(1) + v(2) * v(2)) 2870 NEXT J 2880 RETURN 2960 REM ^^^^^^*OPEN PLTTEK DATA FILE SUBROUTINE^^^^^^^^ 2970 OPEN "PLTTEK.DAT" FOR OUTPUT AS #2 2980 PRINT #2, 1 2990 PRINT #2, 2 3000 PRINT #2, p3 3010 PRINT #2, " DISTANCE(FT) INERTIAL FRAME" 3020 PRINT #2, "DISTANCE (FT) VERTICAL" 3030 PRINT #2, "ROCKET PATH POINTS ARE SEPARATED BY "; t2; "SEC" 3040 PRINT #2, " FROM PROGRAM GEO-ROCK.BAS" 3045 FOR i = 1 TO p3 3050 PRINT #2, xp(i), yp(i) 3055 NEXT i REM Draw limb of earth REM FOR i = 1 TO p3 phi = ATN(yp(i) / xp(i)) xe = R0 * COS(phi) ye = R0 * SIN(phi) PRINT #2, xe, ye NEXT i CLOSE #2 3060 I4 = 1 CHAIN "TEK2WPLT.bas" 3070 END 4350 END SUB askit (I5) 2180 REM ^^^^^*SEE NUMERICAL RESULTS? SUBROUTINE^^^^^^* 2190 PRINT 2200 PRINT "DO YOU WANT TO SEE THE NUMERICAL RESULTS?"; 2210 INPUT R9$ 2220 IF R9$ = "NO" OR R9$ = "no" THEN EXIT SUB 2222 IF R9$ = "YES" OR R9$ = "yes" THEN 2230 ELSE 2190 2230 I5 = 1 2240 PRINT 2250 PRINT 2260 PRINT "TIME", "ALTITUDE", "VX", "VY" 2270 PRINT "SEC", " FT", "FT/S", "FT/S" 2280 REM RETURN END SUB SUB Example 2050 REM ^^^^^^INPUT PARAMETER EXAMPLE SUBROUTINE^^^^^^^^ 2100 PRINT 2110 PRINT "The V2 rocket of World War II had the following characteristics:" 2120 PRINT "ENGINE THRUST = 55,000 LBS." 2130 PRINT "TOTAL WEIGHT AT TAKE OFF = 27,000 LBS WITH 19,200 LB OF FUEL" 2140 PRINT "PROPELANT WAS CONSUMED AT RATE OF 300 LB/S" 2150 PRINT "LENGTH = 47 FT AND DIAMETER = 4.92 FT MAX." 2160 PRINT "TYPICAL LAUNCH ANGLE WAS 57 DEGREES" END SUB SUB FILLIT (NCHAR, A$(), FILL$) 4230 FOR i = 1 TO NCHAR 4240 A$(i) = FILL$ 4250 NEXT i END SUB SUB Globe 180 PRINT SPACE$(20); "SPIN AXIS =R(2) Y axis"; "" 4001 PRINT CHR$(12); 4002 PRINT "It looks like this in cross section." 4003 PRINT SPACE$(20); "SPIN AXIS =R(2) Y axis"; "" 4010 DIM A$(60) 4020 NLINES = 18 4030 NCHAR = 40 4040 RADIUS = 8 4050 EQ$ = " Equator = R(1) = x axis" 4060 FOR J = 1 TO NLINES 4070 Y = NLINES / 2 - J 4080 FILL$ = " " 4090 IF J = NLINES / 2 THEN FILL$ = "-" 4100 CALL FILLIT(NCHAR, A$(), FILL$) 4110 A$(NCHAR / 2) = "I" 4120 IF ABS(Y) > RADIUS THEN 4190 4130 X = SQR(RADIUS ^ 2 - Y ^ 2) 4140 IL = NCHAR / 2 - X * 2 4150 IR = NCHAR / 2 + X * 2 4160 REM PRINT IL,IR,X,J;" ";Y 4170 A$(IL) = "*" 4180 A$(IR) = "*" 4190 CALL PRINTIT(NCHAR, A$(), J, EQ$) 4200 NEXT J PRINT " Launch point is at R(1)=R0 and R(2)=0...the EQUATOR." END SUB SUB Pager 4332 PRINT "PUSH RETURN TO CONTINUE"; "" 4334 INPUT Y6$ 4336 PRINT CHR$(12); END SUB SUB Pict1 60 PRINT " ONE STAGE ROCKET PROGRAM" 70 PRINT "A one stage rocket is launched towards the EAST from a " 80 PRINT "point on the earth's equator. The earth is assumed to be " 90 PRINT "spherical, to rotate uniformly under the rocket" 100 PRINT "and the TRAJECTORY is calculated. Air resistance" 110 PRINT "is included as well as the variation of air density with height." 120 PRINT 130 PRINT "This program solves for the trajectory of the rocket using" 140 PRINT "an INERTIAL COORDINATE SYSTEM fixed at the center of mass" 150 PRINT "of the earth." 160 PRINT "It looks like this in cross section." END SUB SUB Pict2 230 PRINT "V= speed WRT the CENTER OF MASS of the EARTH" 240 PRINT "U= RELATIVE SPEED WRT the AIR" 250 PRINT "R=SQR(X^2+Y^2)=RADIUS VECTOR of the rocket at time t" 260 PRINT "VE=EXHAUST VELOCITY" 270 PRINT "M=INSTANTEOUS MASS of rocket INCLUDING fuel" 280 PRINT 290 PRINT "The FORCE acting to accelerate the rocket forward is " 310 PRINT "F0 = VE*dM(t)" 320 PRINT " ----------" 330 PRINT " dt" 340 PRINT "so the ACCELERATION TERM is A = F0/M(t)" 360 PRINT "Gravity acts to slow down the rocket & its effect is the term" 380 PRINT "_ _" 440 PRINT "A = -G0*R0^2 R" 450 PRINT " ------------" 460 PRINT " ^R0+Y ^3" 470 PRINT "This is the VECTOR FORM of Newton"; s; LAW; OF; GRAVIATION; " " 480 PRINT "where: "; 490 PRINT "G0 = 32.2 FT/S^2"; 500 PRINT "R0 = RADIUS OF EARTH IN FT" 510 PRINT "^" 520 PRINT "R is the UNIT VECTOR POINTING UP" END SUB SUB Pict3 550 PRINT "Air resistance produces a drag force that varies with:" 560 PRINT "1. MASS" 570 PRINT "2. AIR DENSITY" 580 PRINT "3. ROCKET VELOCITY" 590 PRINT "4. THE VELOCITY OF SOUND." 600 PRINT "The DRAG COEFFICIENT reaches maximum when the" 610 PRINT "SOUND BARRIER is passed and depends upon the shape" 620 PRINT "of the vehicle. The rocket is assumed to have a slender" 630 PRINT "conical nose cone with half-vertex angle of 15 degrees." 640 PRINT "The DRAG coefficient is a function of the MACH NUMBER and" 650 PRINT "this is taken into account by putting in the details of the " 660 PRINT "VERTICAL VARIATION of the air density." 680 PRINT "Finally the acceleration due to AIR RESISTANCE is given by" 690 PRINT "_ _ _ _" 700 PRINT "A = -0.001189 * CD * D(y) * SM *ABS U * (U-V )/ M(t)" 720 PRINT "D(y) = RELATIVE DENSITY of AIR as a function of y" 730 PRINT "CD = DRAG COEFFICIENT" 740 PRINT "SM = MAX ROCKET AREA FT^2" END SUB SUB PRINTIT (NCHAR, A$(), J, EQ$) REM 04270 PROC PRINT 4280 FOR i = 1 TO NCHAR 4290 PRINT A$(i); 4300 NEXT i 4310 IF J = NLINES / 2 THEN PRINT EQ$ ELSE PRINT END SUB