X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=qbasicapps.git;a=blobdiff_plain;f=simulation%2Fexplosion%2Fexplode.bas;fp=simulation%2Fexplosion%2Fexplode.bas;h=54e04823d5b3f4a26871fe7ca82b257aae79737e;hp=5d75b75bb0208788f54f20bb8f9fc839129e63a5;hb=08a50b7a860f6aa39f58108a07e2fc13e46260b9;hpb=68c9ea9c1b1c03a3d38bd585f0bdeee6371cb05b diff --git a/simulation/explosion/explode.bas b/simulation/explosion/explode.bas old mode 100755 new mode 100644 index 5d75b75..54e0482 --- a/simulation/explosion/explode.bas +++ b/simulation/explosion/explode.bas @@ -1,8 +1,8 @@ ' Material simulation, simulates shockwaves propagation in gas. ' made by Svjatoslav Agejenko ' in 2003 -' H-Page: svjatoslav.eu -' E-Mail: svjatoslavagejenko@gmail.com +' homepage: svjatoslav.eu +' email: svjatoslav@svjatoslav.eu DECLARE SUB saveit () DECLARE SUB playit () @@ -36,79 +36,79 @@ start 'disp FOR y = 2 TO 99 -FOR x = 2 TO 99 -IF press(x, y) = wal THEN spdx(x - 1, y) = 0: spdy(x, y - 1) = 0: spdx(x, y) = 0: spdy(x, y) = 0: GOTO 3 -spdy(x, y) = spdy(x, y) - (press(x, y) / 500) ' gravitation - -IF press(x + 1, y) = wal THEN spdx(x, y) = 0: GOTO 2 -spdx(x, y) = (press(x + 1, y) - press(x, y)) / 20 + spdx(x, y) -2 -IF press(x, y + 1) = wal THEN spdy(x, y) = 0: GOTO 3 -spdy(x, y) = (press(x, y + 1) - press(x, y)) / 20 + spdy(x, y) -3 -NEXT x + FOR x = 2 TO 99 + IF press(x, y) = wal THEN spdx(x - 1, y) = 0: spdy(x, y - 1) = 0: spdx(x, y) = 0: spdy(x, y) = 0: GOTO 3 + spdy(x, y) = spdy(x, y) - (press(x, y) / 500) ' gravitation + + IF press(x + 1, y) = wal THEN spdx(x, y) = 0: GOTO 2 + spdx(x, y) = (press(x + 1, y) - press(x, y)) / 20 + spdx(x, y) + 2 + IF press(x, y + 1) = wal THEN spdy(x, y) = 0: GOTO 3 + spdy(x, y) = (press(x, y + 1) - press(x, y)) / 20 + spdy(x, y) + 3 + NEXT x NEXT y 4 b = 0 FOR y = 2 TO 99 -FOR x = 2 TO 99 -a = press(x, y) + spdx(x, y) + spdy(x, y) - spdx(x - 1, y) - spdy(x, y - 1) - -IF a = 0 OR ((a < 0) AND (a > -.0001)) THEN -IF spdx(x, y) < 0 THEN spdx(x, y) = 0 -IF spdy(x, y) < 0 THEN spdy(x, y) = 0 -IF spdx(x - 1, y) > 0 THEN spdx(x - 1, y) = 0 -IF spdy(x, y - 1) > 0 THEN spdy(x, y - 1) = 0 -END IF - -IF a < 0 THEN -IF spdx(x, y) < 0 THEN spdx(x, y) = spdx(x, y) / 1.5 -IF spdy(x, y) < 0 THEN spdy(x, y) = spdy(x, y) / 1.5 -IF spdx(x - 1, y) > 0 THEN spdx(x - 1, y) = spdx(x - 1, y) / 1.5 -IF spdy(x, y - 1) > 0 THEN spdy(x, y - 1) = spdy(x, y - 1) / 1.5 -b = 1 -LOCATE 20, 1 -PRINT a -END IF -NEXT x + FOR x = 2 TO 99 + a = press(x, y) + spdx(x, y) + spdy(x, y) - spdx(x - 1, y) - spdy(x, y - 1) + + IF a = 0 OR ((a < 0) AND (a > -.0001)) THEN + IF spdx(x, y) < 0 THEN spdx(x, y) = 0 + IF spdy(x, y) < 0 THEN spdy(x, y) = 0 + IF spdx(x - 1, y) > 0 THEN spdx(x - 1, y) = 0 + IF spdy(x, y - 1) > 0 THEN spdy(x, y - 1) = 0 + END IF + + IF a < 0 THEN + IF spdx(x, y) < 0 THEN spdx(x, y) = spdx(x, y) / 1.5 + IF spdy(x, y) < 0 THEN spdy(x, y) = spdy(x, y) / 1.5 + IF spdx(x - 1, y) > 0 THEN spdx(x - 1, y) = spdx(x - 1, y) / 1.5 + IF spdy(x, y - 1) > 0 THEN spdy(x, y - 1) = spdy(x, y - 1) / 1.5 + b = 1 + LOCATE 20, 1 + PRINT a + END IF + NEXT x NEXT y IF b = 1 THEN GOTO 4 FOR y = 2 TO 99 -FOR x = 2 TO 99 -IF spdx(x, y) > 0 THEN spdxp(x - 1, y) = ((press(x, y) * spdx(x - 1, y)) + (spdx(x, y) * spdx(x, y))) / (press(x, y) + spdx(x, y)) - spdx(x - 1, y) -IF spdy(x, y) > 0 THEN spdyp(x, y - 1) = ((press(x, y) * spdy(x, y - 1)) + (spdy(x, y) * spdy(x, y))) / (press(x, y) + spdy(x, y)) - spdy(x, y - 1) -IF spdx(x - 1, y) < 0 THEN spdxp(x, y) = ((press(x, y) * spdx(x, y)) - (spdx(x - 1, y) * spdx(x - 1, y))) / (press(x, y) - spdx(x - 1, y)) - spdx(x, y) -IF spdy(x, y - 1) < 0 THEN spdyp(x, y) = ((press(x, y) * spdy(x, y)) - (spdy(x, y - 1) * spdy(x, y - 1))) / (press(x, y) - spdy(x, y - 1)) - spdy(x, y) -NEXT x + FOR x = 2 TO 99 + IF spdx(x, y) > 0 THEN spdxp(x - 1, y) = ((press(x, y) * spdx(x - 1, y)) + (spdx(x, y) * spdx(x, y))) / (press(x, y) + spdx(x, y)) - spdx(x - 1, y) + IF spdy(x, y) > 0 THEN spdyp(x, y - 1) = ((press(x, y) * spdy(x, y - 1)) + (spdy(x, y) * spdy(x, y))) / (press(x, y) + spdy(x, y)) - spdy(x, y - 1) + IF spdx(x - 1, y) < 0 THEN spdxp(x, y) = ((press(x, y) * spdx(x, y)) - (spdx(x - 1, y) * spdx(x - 1, y))) / (press(x, y) - spdx(x - 1, y)) - spdx(x, y) + IF spdy(x, y - 1) < 0 THEN spdyp(x, y) = ((press(x, y) * spdy(x, y)) - (spdy(x, y - 1) * spdy(x, y - 1))) / (press(x, y) - spdy(x, y - 1)) - spdy(x, y) + NEXT x NEXT y FOR y = 2 TO 99 -FOR x = 2 TO 99 -press(x + 1, y) = press(x + 1, y) - spdx(x, y) -press(x, y + 1) = press(x, y + 1) - spdy(x, y) -press(x, y) = press(x, y) + spdx(x, y) -press(x, y) = press(x, y) + spdy(x, y) -NEXT x + FOR x = 2 TO 99 + press(x + 1, y) = press(x + 1, y) - spdx(x, y) + press(x, y + 1) = press(x, y + 1) - spdy(x, y) + press(x, y) = press(x, y) + spdx(x, y) + press(x, y) = press(x, y) + spdy(x, y) + NEXT x NEXT y FOR y = 2 TO 99 -FOR x = 2 TO 99 -spdx(x, y) = spdx(x, y) + spdxp(x, y) -spdxp(x, y) = 0 -spdy(x, y) = spdy(x, y) + spdyp(x, y) -spdyp(x, y) = 0 -NEXT x + FOR x = 2 TO 99 + spdx(x, y) = spdx(x, y) + spdxp(x, y) + spdxp(x, y) = 0 + spdy(x, y) = spdy(x, y) + spdyp(x, y) + spdyp(x, y) = 0 + NEXT x NEXT y FOR y = 1 TO 100 -FOR x = 1 TO 100 -PSET (x, y), press(x, y) + 16 -NEXT x + FOR x = 1 TO 100 + PSET (x, y), press(x, y) + 16 + NEXT x NEXT y saveit @@ -122,10 +122,10 @@ CLOSE #1 SUB disp FOR y = 47 TO 53 -FOR x = 47 TO 53 -LOCATE y - 46, (x - 46) * 4 -PRINT press(x, y) -NEXT x + FOR x = 47 TO 53 + LOCATE y - 46, (x - 46) * 4 + PRINT press(x, y) + NEXT x NEXT y a$ = INPUT$(1) @@ -142,9 +142,9 @@ x3 = x2 - x1 y3 = y2 - y1 FOR a = 0 TO m -x5 = x3 * a / m + x1 -y5 = y3 * a / m + y1 -press(x5, y5) = wal + x5 = x3 * a / m + x1 + y5 = y3 * a / m + y1 + press(x5, y5) = wal NEXT a @@ -152,12 +152,12 @@ END SUB SUB saveit FOR y = 1 TO 100 -a$ = "" -FOR x = 1 TO 100 -a$ = a$ + CHR$(POINT(x, y)) -NEXT x -linb = a$ -PUT #1, , linb + a$ = "" + FOR x = 1 TO 100 + a$ = a$ + CHR$(POINT(x, y)) + NEXT x + linb = a$ + PUT #1, , linb NEXT y @@ -174,19 +174,19 @@ SUB start frm = 0 FOR a = 1 TO 100 -FOR b = 1 TO 100 -press(a, b) = 3 -spdx(a, b) = 0 -spdy(a, b) = 0 -spdxp(a, b) = 0 -spdyp(a, b) = 0 -NEXT b + FOR b = 1 TO 100 + press(a, b) = 3 + spdx(a, b) = 0 + spdy(a, b) = 0 + spdxp(a, b) = 0 + spdyp(a, b) = 0 + NEXT b NEXT a FOR y = 30 TO 60 -FOR x = 10 TO 50 -spot x, y, 30 -NEXT x + FOR x = 10 TO 50 + spot x, y, 30 + NEXT x NEXT y lin 2, 2, 2, 99 @@ -195,7 +195,7 @@ lin 2, 99, 99, 99 lin 2, 2, 99, 2 FOR x = 5 TO 40 STEP 5 -lin x, 80, x + 50, 80 - x + lin x, 80, x + 50, 80 - x NEXT x END SUB