'bicikli kerekerol lerepulo sarak milyen surusegben boritjak be a foldet. 'A legellenallast elhanyagoljuk. n = 20 DIM x(n) DIM y(n) DIM x0(n) DIM y0(n) DIM vx(n) DIM vy(n) DIM joszog(100) DIM kul(1000) DIM hely(300) pi = 3.14 r = 100 g = 10 RANDOMIZE TIMER CLS SCREEN 12 LOCATE 1, 1: PRINT "A roptavolsag a levalasi szog fuggvenyeben kul. sebessegekre" LOCATE 4, 1: PRINT "sebesseg - jo szog" FOR v = 5 TO 60 STEP 5 max = 0 FOR fi = 0 TO pi / 2 STEP .005 h = v * SIN(fi) / g marha = r * SIN(fi) mm = v * COS(fi) er = (h ^ 2 + 2 * r * (1 - COS(fi))) iksz = marha + mm * (h + SQR(er) / g) PSET (fi * 300 + 100, 450 - iksz), v / 5 IF iksz > max THEN max = iksz: maxhely = fi t$ = INKEY$: IF t$ <> "" THEN GOTO itt NEXT fi LOCATE v / 5 + 5, 1 + .5 * (ABS(SGN(v - 6)) - SGN(v - 6)): PRINT v; " "; maxhely / pi * 180 NEXT v cc: c$ = INKEY$ IF c$ = "" THEN GOTO cc itt: CLS OPEN "sarhmax.dat" FOR INPUT AS #3 LOCATE 1, 1: PRINT "A jo levalasi szog a sebesseg fuggvenyeben (0 < v < 100)" LOCATE 2, 1: PRINT "Felso vonal: 90 fok" LOCATE 3, 1: PRINT "Also vonal: 45 fok" LOCATE 4, 1: PRINT "Osszehasonlitasul alatta ott egy 1/x fuggveny" LINE (1, 700 - pi * 200)-(500, 700 - pi * 200) LINE (1, 700 - pi * 100)-(500, 700 - pi * 100) FOR i = 1 TO 100 INPUT #3, v, joszog(i) PSET (v * 5, 700 - pi * 100 - 1000 / i), 12 PSET (v * 5, 700 - joszog(i) * 400), 10 NEXT i CLOSE #3 ww: w$ = INKEY$ IF w$ = "" THEN GOTO ww ' az elmeleti gorbe kepzese ' Veszunk egy roptavhatart, ehhez megkeressuk azokat a szogeket, ' amelyekbol "eppen" oda ropul a sardarabka. Ezen szogek kulonbsege ' megmondja, hogy az adott roptavhatarig a sarak hanyada repul el. ' Ez egy csokkeno fuggveny. Ha "jobbrol indulva" derivaljuk, ' megkapjuk a surusegfv-t. Ez az elmeleti megfeleloje annak a ' tapasztalati szamlalonak, hogy "az x-tol x+dx-ig huzodo tartomanyba ' a sargolyok mekkora hanyada potyog bele. ' Modszer: CLS INPUT " sebesseg (<60)"; v LOCATE 1, 3: PRINT "Sarga: Szelessegfuggveny, azaz az illeto tavig elrepulo sarak reszaranya" LINE (1, 400)-(600, 400) LINE (1, 400)-(1, 1) hatar = 2 balfi = 0 jobbfi = pi / 2 tav = pi / 2 ide: IF ABS(balfi - jobbfi) < .001 THEN GOTO oda balh = v * SIN(balfi) / g pp = balh ^ 2 + 2 * r * (1 - COS(balfi)) / g baliksz = r * SIN(balfi) + v * COS(balfi) * (balh + SQR(pp)) jobbh = v * SIN(jobbfi) / g pp = jobbh ^ 2 + 2 * r * (1 - COS(jobbfi)) / g jobbiksz = r * SIN(jobbfi) + v * COS(jobbfi) * (jobbh + SQR(pp)) IF baliksz < hatar THEN balfi = balfi + .001: GOTO ide IF jobbiksz < hatar THEN jobbfi = jobbfi - .001: GOTO ide tav0 = tav tav = jobbfi - balfi PSET (hatar, 400 - tav * 200), 14 kul(hatar / 2) = tav0 - tav hatar = hatar + 2 GOTO ide oda: LOCATE 2, 3: PRINT "Piros: Surusegfuggveny, azaz az illeto tav kozelebe repulo sarak reszaranya" FOR i = 2 TO hatar STEP 2 PSET (i, 400 - kul(i / 2) * 2000), 12 NEXT i hh: h$ = INKEY$: IF h$ = "" THEN GOTO hh CLS l = 150 finomsag = 5 m = INT(85 * v / finomsag) + 1 dt = .05 megvan = 1 luk$ = " " FOR i = 1 TO n y(i) = 401 NEXT i RANDOMIZE TIMER CIRCLE (r, 400 - l - r), r, 2 LINE (1, 401 - l)-(600, 401 - l), 6 LOCATE 27, 1: PRINT "Beesesi suruseg, elotte az elmeleti gorbe." forog: FOR i = 1 TO n IF y(i) <= 400 - l THEN GOTO tovabb IF vx(i) <= 0 THEN GOTO inditas hely(INT((x(i) - r) / finomsag) + 1) = hely(INT((x(i) - r) / finomsag) + 1) + 1 osszes = osszes + 1 megvan = 0 inditas: alfa = RND * pi / 2 y(i) = 400 - l - r * (1 - COS(alfa)) x(i) = r * (1 + SIN(alfa)) vx(i) = v * COS(alfa) vy(i) = -v * SIN(alfa) tovabb: x(i) = x(i) + vx(i) * dt y(i) = y(i) + vy(i) * dt + g / 2 * dt ^ 2 vy(i) = vy(i) + g * dt PSET (x0(i), y0(i)), 0 PSET (x(i), y(i)) LOCATE 24, 1: PRINT osszes x0(i) = x(i) y0(i) = y(i) IF INT(osszes / 20) <> osszes / 20 OR megvan = 1 THEN GOTO megtovabb megvan = 1 FOR i = 17 TO 26 LOCATE i, 1: PRINT luk$ NEXT i IF pup = 0 THEN GOTO nincspup FOR i = 2 TO 16 LOCATE i, 5 + 70 * (pup - r) / (600 - r): PRINT " " NEXT i pup = 0 nincspup: CIRCLE (r, 400 - l - r), r, 2 LINE (1, 401 - l)-(600, 401 - l), 6 LINE (r, 400)-(600, 400), 1 LINE (r, 400)-(r, 400 - l), 1 FOR j = 1 TO 120 a = r + j * finomsag b = 400 - hely(j) / osszes * l * 40 / finomsag c = r + (j - 1) * finomsag d = 400 - hely(j - 1) / osszes * l * 40 / finomsag LINE (a, 400)-(a, b), 4 IF j > 0 THEN LINE (a, b)-(c, d), 7 IF b < 400 - l AND pup = 0 THEN pup = a NEXT j FOR i = 2 TO hatar STEP 2 PSET (r + i, 400 - kul(i / 2) * 2000), 14 NEXT i megtovabb: NEXT i a$ = INKEY$ IF a$ <> "" THEN GOTO mindjart GOTO forog mindjart: END