REM WAVE_EQ Written by Prof. Richard B. Goldstein 10/27/95 DEF FNF (X) IF X > .25 AND X <= .5 THEN FNF = X - .25 END IF IF X > .5 AND X <= .75 THEN FNF = .75 - X END IF IF X <= .25 OR X > .75 THEN FNF = 0 END IF END DEF DIM F(50, 2), GX(50), GY(50, 2), C(2) CLS C(0) = 2: C(1) = 9: C(2) = 12: YM = -1E+30 INPUT "Subdivisions (from 20 to 50):", NS NS = INT(NS) FOR K = 0 TO NS GX(K) = K * 639 / NS Y = FNF(K / NS) IF Y > YM THEN YM = Y NEXT PRINT "OPTIONS:" INPUT " AUTOMATIC SPEED (Y/N)? ", QS$ IF QS$ = "N" OR QS$ = "n" THEN PRINT : INPUT " Choices (F)ast, (M)edium, (S)low :", QS2$: PRINT END IF ZM = 500 IF QS2$ = "S" OR QS2$ = "s" THEN ZM = 3000 IF QS2$ = "M" OR QS2$ = "m" THEN ZM = 1500 INPUT " ONLY ONE CYCLE (Y/N)? ", QC$ MMAX = 4000: IF QC$ = "Y" OR QC$ = "y" THEN MMAX = 100 INPUT " STRING ONLY (Y/N)? ", QO$ IMAX = 0: IF QO$ = "N" OR QO$ = "n" THEN IMAX = 2 INPUT " USE [ENTER] KEY TO STEP (Y/N)? ", QE$ INPUT " SUPERIMPOSE ALL STRING POSITIONS (Y/N)? ", QI$ IF QE$ = "Y" OR QE$ = "y" THEN MMAX = 2 * NS QI = 0: IF QI$ = "Y" OR QI$ = "y" THEN MMAX = NS: QI = 1 SCREEN 12 FOR M = 0 TO MMAX CR = CR + 1 IF CR > 15 THEN CR = CR - 15 LINE (0, 240)-(639, 240), 7 L = M / NS FOR I = 1 TO 2 T = (I - 1.5) * L * 2 X = T X = X - INT(X / 2) * 2 IF X <= 1 THEN Y = FNF(X) ELSE Y = -FNF(2 - X) END IF F(0, I) = Y GY(0, I) = 240 - Y * 235 / YM FOR K = 1 TO NS X = K / NS + T X = X - INT(X / 2) * 2 IF X <= 1 THEN Y = FNF(X) ELSE Y = -FNF(2 - X) END IF F(K, I) = Y GY(K, I) = 240 - Y * 235 / YM NEXT NEXT FOR K = 0 TO NS GY(K, 0) = (GY(K, 1) + GY(K, 2)) / 2 NEXT FOR I = 0 TO IMAX PSET (GX(0), GY(0, I)), CR FOR K = 1 TO NS LINE -(GX(K), GY(K, I)), CR NEXT NEXT FOR Z = 0 TO ZM: NEXT IF QE$ = "Y" OR QE$ = "y" THEN LOCATE 1, 1: INPUT "", ZZ$ IF M < MMAX AND QI = 0 THEN FOR I = 0 TO IMAX PSET (GX(0), GY(0, I)), 0 FOR K = 1 TO NS LINE -(GX(K), GY(K, I)), 0 NEXT NEXT END IF Y$ = INKEY$: IF Y$ <> "" THEN END NEXT