10 REM ** FEHSKENS - MALEWICKI TRAJECTORY CALCULATIONS ** 20 REM ** LARRY CURCIO ** 30 REM ** COPYRIGHT 1992 ** 40 REM ** FREE NOT-FOR-PROFIT DISTRIBUTION ALLOWED ** 50 REM ** HYPERBOLIC SINE FUNCTION ** 60 DEF FNSH (Z) = .5 * (EXP(Z) - EXP(-Z)) 70 REM ** HYPERBOLIC COSIN FUNCTION ** 80 DEF FNCH (Z) = .5 * (EXP(Z) + EXP(-Z)) 90 REM ** HYPERBOLIC TANGENT FUNCTION ** 100 DEF FNTH (Z) = FNSH(Z) / FNCH(Z) 110 REM ** THRUST NET OF GRAVITY 120 G = 9.8: REM ** GRAVITATIONAL CONSTANT ** 130 RHOAIR = 1.205: REM ** AIR DENSITY ** 140 MTOF = 1 / (2.54 * .12) 150 GOTO 740: REM ** DRIVER ** 160 REM ** BURNOUT ALTITUDE ** 170 WORK = FNCH(TB * SQR(K * NETF) / MAV) 175 WORK = WORK + INITV * SQR(K / NETF) * FNSH(TB * SQR(K * NETF) / MAV) 180 YB = MAV * LOG(WORK) / K + INITY 190 RETURN 200 REM ** BURNOUT VELOCITY ** 210 WORK1 = FNTH(TB * SQR(K * NETF) / MAV) 220 WORK2 = INITV * SQR(K / NETF) 230 VB = SQR(NETF / K) * (WORK1 + WORK2) / (1 + WORK1 * WORK2) 240 RETURN 250 REM ** COAST TIME ** 260 TC = SQR(MB / (G * K)) * ATN(VB * SQR(K / (MB * G))) 270 RETURN 280 REM ** COAST ALTITUDE ** 290 YC = MB * LOG(K * VB * VB / (MB * G) + 1!) / (K + K) 300 RETURN 310 REM ** TRAJECTORY CALCULATION ROUTINE ** 320 F = TOTIMP / TB: INITV = 0: INITY = 0 330 MB = MROCKET - MP 340 MAV = MB + .5 * MP: NETF = F - MAV * G 350 AX = 3.14159265358979# * D * D / 4 360 K = AX * CD * RHOAIR * .5 370 GOSUB 160: REM ** BURNOUT ALTITUDE, YB ** 380 GOSUB 200: REM ** BURNOUT VELOCITY, VB ** 390 GOSUB 250: REM ** COAST TIME, TC ** 400 GOSUB 280: REM COAST ALTITUDE, YC ** 410 YTOT = YB + YC 420 RETURN 430 REM ** PRINT ROUTINE ** 440 PRINT "TOTAL ALTITUDE = "; YTOT; " METERS OR "; YTOT * MTOF; " FEET" 450 PRINT "CUTOFF ALTITUDE = "; YB; " METERS OR "; YB * MTOF; " FEET" 460 PRINT 470 PRINT "CUTOFF VELOCITY = "; VB; " M/SEC OR "; VB * MTOF; " FT/SEC" 480 PRINT "COAST TIME = "; TC; " SECONDS" 490 PRINT "ASCENT TIME = "; TC + TB; " SECONDS" 500 PRINT "DRAG CONSTANT (K)= "; K; "KG/M" 510 RETURN 520 REM ** DRIVER ** 530 CLS 540 PRINT "LAUNCH MASS (GRAMS) ("; MROCKET1; ") "; 550 INPUT WORK$ 560 IF WORK$ <> "" THEN MROCKET1 = VAL(WORK$): MROCKET = MROCKET1 / 1000 570 PRINT "PROPELLANT MASS (GRAMS) ("; MP1; ") "; 580 INPUT WORK$ 590 IF WORK$ <> "" THEN MP1 = VAL(WORK$): MP = MP1 / 1000 600 PRINT "TOTAL IMPULSE (NS) ("; TOTIMP; ") "; 610 INPUT WORK$ 620 IF WORK$ <> "" THEN TOTIMP = VAL(WORK$) 630 PRINT "BURN TIME (SEC) ("; TB; ") "; 640 INPUT WORK$ 650 IF WORK$ <> "" THEN TB = VAL(WORK$) 660 PRINT "BODY DIAMETER (CM) ("; D1; ") "; 670 INPUT WORK$ 680 IF WORK$ <> "" THEN D1 = VAL(WORK$): D = D1 / 100 690 PRINT "Cd (NO UNITS) ("; CD; ") "; 700 INPUT WORK$ 710 IF WORK$ <> "" THEN CD = VAL(WORK$) 720 PRINT " ========================================= ": PRINT 730 RETURN 740 FOR ILOOP = 1 TO 10000 750 GOSUB 520 760 GOSUB 310 770 PRINT 780 GOSUB 430 790 INPUT A$ 800 IF A$ = "q" OR A$ = "Q" THEN 820 810 NEXT ILOOP 820 REM