From: Svjatoslav Agejenko Date: Tue, 20 Aug 2024 08:40:15 +0000 (+0300) Subject: Using AI to improve code readability X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=d73e2edf661e03aae22e9036d7f10fbedb45b758;p=qbasicapps.git Using AI to improve code readability --- diff --git a/Graphics/3D/mtrxmath.bas b/Graphics/3D/mtrxmath.bas index 65770cd..391fc83 100755 --- a/Graphics/3D/mtrxmath.bas +++ b/Graphics/3D/mtrxmath.bas @@ -1,5 +1,12 @@ -' 3D transformation using 3*3 matrix math. -' by Svjatoslav Agejenko 2003.03 +' Program to demonstrate 3x3 matrix math for coordinate rotation in 3D space. +' By Svjatoslav Agejenko. +' Email: svjatoslav@svjatoslav.eu +' Homepage: http://www.svjatoslav.eu +' +' Changelog: +' 2003.03, Initial version +' 2024.08, Improved program readability using AI + ' use keys: ' 7 9 - change alpha @@ -7,58 +14,59 @@ ' 1 3 - change gamma ' ESC - quit program -DECLARE SUB gc (x!, y!, z!, x1!, y1!) -DECLARE SUB setan (a!, b!, c!) -DIM SHARED mx1, my1, mz1 -DIM SHARED mx2, my2, mz2 -DIM SHARED mx3, my3, mz3 +DECLARE SUB graphicalCoordinates (xVal!, yVal!, zVal!, x1Val!, y1Val!) +DECLARE SUB setAngles (alphaVal!, betaVal!, gammaVal!) +DIM SHARED matrixX1, matrixY1, matrixZ1 +DIM SHARED matrixX2, matrixY2, matrixZ2 +DIM SHARED matrixX3, matrixY3, matrixZ3 SCREEN 7, , , 1 +' Main loop starts here 1 -setan n1, n2, n3 +CALL setAngles(angleAlpha, angleBeta, angleGamma) FOR y = -70 TO 70 STEP 5 FOR x = -70 TO 70 STEP 5 - gc x, y, SIN((ABS(x) + ABS(y)) / 30) * 30, x1, y1 - PSET (x1, y1), 15 + CALL graphicalCoordinates(x, y, SIN((ABS(x) + ABS(y)) / 30) * 30, x1Val, y1Val) + PSET (x1Val, y1Val), 15 NEXT x NEXT y PCOPY 0, 1 CLS -a$ = INPUT$(1) -IF a$ = "7" THEN n1 = n1 + .1 -IF a$ = "9" THEN n1 = n1 - .1 -IF a$ = "4" THEN n2 = n2 + .1 -IF a$ = "6" THEN n2 = n2 - .1 -IF a$ = "1" THEN n3 = n3 + .1 -IF a$ = "3" THEN n3 = n3 - .1 -IF a$ = CHR$(27) THEN SYSTEM +inputChar$ = INPUT$(1) +IF inputChar$ = "7" THEN angleAlpha = angleAlpha + .1 +IF inputChar$ = "9" THEN angleAlpha = angleAlpha - .1 +IF inputChar$ = "4" THEN angleBeta = angleBeta + .1 +IF inputChar$ = "6" THEN angleBeta = angleBeta - .1 +IF inputChar$ = "1" THEN angleGamma = angleGamma + .1 +IF inputChar$ = "3" THEN angleGamma = angleGamma - .1 +IF inputChar$ = CHR$(27) THEN SYSTEM GOTO 1 -SUB gc (x, y, z, x1, y1) - -rx = x * mx1 + y * my1 + z * mz1 ' matrix transformation -ry = x * mx2 + y * my2 + z * mz2 -rz = x * mx3 + y * my3 + z * mz3 - -rz = rz + 100 ' perspective calculation -x1 = rx / rz * 120 + 160 -y1 = ry / rz * 120 + 100 +SUB graphicalCoordinates (xVal, yVal, zVal, x1Val, y1Val) + ' matrix transformation + rxVal = xVal * matrixX1 + yVal * matrixY1 + zVal * matrixZ1 + ryVal = xVal * matrixX2 + yVal * matrixY2 + zVal * matrixZ2 + rzVal = xVal * matrixX3 + yVal * matrixY3 + zVal * matrixZ3 + ' perspective calculation + rzVal = rzVal + 100 + x1Val = rxVal / rzVal * 120 + 160 + y1Val = ryVal / rzVal * 120 + 100 END SUB -SUB setan (alp, bet, gam) -mx1 = SIN(gam) * SIN(bet) * SIN(alp) + COS(gam) * COS(alp) -my1 = COS(bet) * SIN(alp) -mz1 = SIN(gam) * COS(alp) - COS(gam) * SIN(bet) * SIN(alp) +SUB setAngles (alphaVal, betaVal, gammaVal) + ' Calculate rotation matrix elements for alpha, beta, and gamma angles + matrixX1 = SIN(gammaVal) * SIN(betaVal) * SIN(alphaVal) + COS(gammaVal) * COS(alphaVal) + matrixY1 = COS(betaVal) * SIN(alphaVal) + matrixZ1 = SIN(gammaVal) * COS(alphaVal) - COS(gammaVal) * SIN(betaVal) * SIN(alphaVal) -mx2 = SIN(gam) * SIN(bet) * COS(alp) - COS(gam) * SIN(alp) -my2 = COS(bet) * COS(alp) -mz2 = -COS(gam) * SIN(bet) * COS(alp) - SIN(gam) * SIN(alp) - -mx3 = -SIN(gam) * COS(bet) -my3 = SIN(bet) -mz3 = COS(gam) * COS(bet) -END SUB + matrixX2 = SIN(gammaVal) * SIN(betaVal) * COS(alphaVal) - COS(gammaVal) * SIN(alphaVal) + matrixY2 = COS(betaVal) * COS(alphaVal) + matrixZ2 = -COS(gammaVal) * SIN(betaVal) * COS(alphaVal) - SIN(gammaVal) * SIN(alphaVal) + matrixX3 = -SIN(gammaVal) * COS(betaVal) + matrixY3 = SIN(betaVal) + matrixZ3 = COS(gammaVal) * COS(betaVal) +END SUB \ No newline at end of file diff --git a/Graphics/Animations/2drot.bas b/Graphics/Animations/2drot.bas index 76916b7..96804e1 100755 --- a/Graphics/Animations/2drot.bas +++ b/Graphics/Animations/2drot.bas @@ -1,54 +1,50 @@ -' 3D rotation -' made by Svjatoslav Agejenko -' in 2003.12 -' H-Page: svjatoslav.eu -' E-Mail: svjatoslav@svjatoslav.eu - -DIM SHARED px(1000) ' point x & y location -DIM SHARED py(1000) -DIM SHARED ox(1000) ' point old x & y location -DIM SHARED oy(1000) +' Program to render rotating pixels +' By Svjatoslav Agejenko. +' Email: svjatoslav@svjatoslav.eu +' Homepage: http://www.svjatoslav.eu +' +' Changelog: +' 2003.12, Initial version +' 2024.08, Improved program readability using AI +DIM SHARED pointX(1000) ' Point x & y location +DIM SHARED pointY(1000) +DIM SHARED oldPointX(1000) ' Old point x & y location +DIM SHARED oldPointY(1000) + SCREEN 13 -np = 0 'Set points to them place -FOR x = -10 TO 10 -FOR y = -10 TO 10 -np = np + 1 -px(np) = x -py(np) = y -NEXT y -NEXT x - - 'Rotate points now -nrk = 0 'start angle +numPoints = 0 ' Set points to their place +FOR pointXVal = -10 TO 10 + FOR pointYVal = -10 TO 10 + numPoints = numPoints + 1 + pointX(numPoints) = pointXVal + pointY(numPoints) = pointYVal + NEXT pointYVal +NEXT pointXVal + +' Rotate points now +rotationAngle = 0 ' Start angle 1 -nrk = nrk + .01 -s1 = SIN(nrk) -c1 = COS(nrk) - - -FOR a = 1 TO 399 -PSET (ox(a), oy(a)), 0 - -x = px(a) -y = py(a) - -x1 = x * s1 + y * c1 -y1 = x * c1 - y * s1 -x1 = x1 * 7 + 160 -y1 = y1 * 7 + 100 - + rotationAngle = rotationAngle + 0.01 + sineOfAngle = SIN(rotationAngle) + cosineOfAngle = COS(rotationAngle) -ox(a) = x1 -oy(a) = y1 -PSET (x1, y1), 15 + FOR a = 1 TO numPoints + PSET (oldPointX(a), oldPointY(a)), 0 -NEXT a + x = pointX(a) + y = pointY(a) -IF INKEY$ = "" THEN GOTO 1 - + newX = x * sineOfAngle + y * cosineOfAngle + newY = x * cosineOfAngle - y * sineOfAngle + newX = newX * 7 + 160 + newY = newY * 7 + 100 -SYSTEM + oldPointX(a) = newX + oldPointY(a) = newY + PSET (newX, newY), 15 + NEXT a +IF INKEY$ = "" THEN GOTO 1 \ No newline at end of file diff --git a/Graphics/Animations/matrix2.bas b/Graphics/Animations/matrix2.bas index 645e0f0..d1865cf 100755 --- a/Graphics/Animations/matrix2.bas +++ b/Graphics/Animations/matrix2.bas @@ -1,73 +1,89 @@ -' Svjatoslav Agejenko -' year: 2002 +' Program to render animation inspired by movie. +' By Svjatoslav Agejenko. +' Email: svjatoslav@svjatoslav.eu +' Homepage: http://www.svjatoslav.eu +' +' Changelog: +' 2002, Initial version +' 2024.08, Improved program readability using AI + DEFINT A-Z -DECLARE SUB putm () -DIM SHARED tmr AS DOUBLE -DIM SHARED arv(1 TO 20) -DIM SHARED lng -DIM SHARED msg$ +DECLARE SUB PutMatrix () +DIM SHARED array(1 TO 20) +DIM SHARED length +DIM SHARED message$ RANDOMIZE 2 CLS COLOR 10, 0 -msg$ = "" -e = 0 -g = 0 -putm -1 -f = 0 -IF g >= 3 THEN f = 10000: g = 0 -SOUND f, .2 -e = e + 1 -g = g + 1 -IF e > 100 THEN putm: e = 0 +message$ = "" +counter = 0 +iteration = 0 +PutMatrix + +1 : ' Label for looping +frequency = 0 +IF iteration >= 3 THEN frequency = 10000: iteration = 0 +SOUND frequency, .2 +counter = counter + 1 +iteration = iteration + 1 +IF counter > 100 THEN PutMatrix: counter = 0 -b$ = "" -c = 1 -FOR a = 1 TO 80 -c = c + 1 -d$ = CHR$(RND * 9 + 48) -IF c > lng THEN c = 1: d$ = " " -b$ = b$ + d$ -NEXT a +displayLine$ = "" +lineCounter = 1 +FOR column = 1 TO 80 + lineCounter = lineCounter + 1 + char$ = CHR$(INT(RND * 9) + 48) + IF lineCounter > length THEN lineCounter = 1: char$ = " " + displayLine$ = displayLine$ + char$ +NEXT column LOCATE 25, 1 -PRINT b$ +PRINT displayLine$ IF INKEY$ <> "" THEN COLOR 7, 0: CLS : SYSTEM GOTO 1 -SUB putm -VIEW PRINT 1 TO 25 -SELECT CASE lng -CASE 13 -msg$ = "Are you sure the line is clear ?" -CASE 6 -msg$ = " Then I'll go ..." -END SELECT +SUB PutMatrix + VIEW PRINT 1 TO 25 + SELECT CASE length + CASE 13 + message$ = "Are you sure the line is clear?" + CASE 6 + message$ = " Then I'll go ..." + END SELECT -LOCATE 1, 30 -PRINT " " -LOCATE 1, 30 -PRINT msg$ -c = RND * 9 + 1 -FOR b = 1 TO 3 -FOR a = c TO 10 -IF arv(a) = -1 THEN arv(a) = RND * 8 + 1: lng = lng - 1: GOTO 2 -NEXT a -c = 1 -NEXT b -lng = 13 -FOR a = 1 TO 20 -arv(a) = -1 -NEXT a -CLS -IF msg$ <> "" THEN SYSTEM -2 -FOR a = 1 TO 20 -LOCATE 1, a -IF arv(a) = -1 THEN b$ = " " ELSE b$ = STR$(arv(a)) -b$ = RIGHT$(b$, 1) -PRINT b$ -NEXT a -VIEW PRINT 2 TO 25 + LOCATE 1, 30 + PRINT " "; + LOCATE 1, 30 + PRINT message$ + + randomValue = INT(RND * 9) + 1 + FOR pass = 1 TO 3 + FOR value = randomValue TO 10 + IF array(value) = -1 THEN + array(value) = INT(RND * 8) + 1 + length = length - 1 + GOTO 2 + END IF + NEXT value + randomValue = 1 + NEXT pass + + length = 13 + FOR index = 1 TO 20 + array(index) = -1 + NEXT index + + CLS + IF message$ <> "" THEN SYSTEM + +2 : ' Label for continuing after GOTO + FOR index = 1 TO 20 + LOCATE 1, index + IF array(index) = -1 THEN displayChar$ = " " ELSE displayChar$ = STR$(array(index)) + displayChar$ = RIGHT$(displayChar$, 1) + PRINT displayChar$ + NEXT index + + VIEW PRINT 2 TO 25 END SUB