Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Tue, 20 Aug 2024 08:40:15 +0000 (11:40 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Tue, 20 Aug 2024 08:40:15 +0000 (11:40 +0300)
Graphics/3D/mtrxmath.bas
Graphics/Animations/2drot.bas
Graphics/Animations/matrix2.bas

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