Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 17 Aug 2024 13:09:50 +0000 (16:09 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 17 Aug 2024 13:09:50 +0000 (16:09 +0300)
Graphics/Spirals/spiral8.bas

index 2f93ed5..ac3a5f8 100644 (file)
@@ -1,84 +1,99 @@
-' Spiral\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
+' Program to render fancy looking spiral.\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
-DECLARE SUB fill (x1, y1, x2, y2, xx1, yy1, xx2, yy2)\r
-DIM SHARED torux(1 TO 10000)\r
-DIM SHARED toruy(1 TO 10000)\r
-DIM SHARED sin1(1 TO 10000)\r
-DIM SHARED cos1(1 TO 10000)\r
-DIM SHARED tor\r
+DECLARE SUB FillSegment (x1, y1, x2, y2, xx1, yy1, xx2, yy2)\r
+DIM SHARED spiralX(1 TO 10000)\r
+DIM SHARED spiralY(1 TO 10000)\r
+DIM SHARED angles(1 TO 10000)\r
+DIM SHARED phaseAngles(1 TO 10000)\r
+DIM SHARED spiralLength\r
 SCREEN 12\r
-su = 200\r
-tor = 0\r
-FOR a = 1 TO 97 STEP .15\r
-tor = tor + 1\r
-su = SIN(a / 31) * 100\r
-x = SIN(a) * su * 3 + 320\r
-y = COS(a) * su + 250\r
-y = y - (COS(a / 31) * 200)\r
-sin1(tor) = a\r
-cos1(tor) = a / 31\r
-torux(tor) = x\r
-toruy(tor) = y\r
-PSET (x, y), 15\r
-NEXT a\r
+stepUnit = 200\r
+spiralLength = 0\r
+\r
+' Generate the spiral points\r
+FOR angleIndex = 1 TO 97 STEP .15\r
+    spiralLength = spiralLength + 1\r
+    stepUnit = SIN(angleIndex / 31) * 100\r
+    xPos = SIN(angleIndex) * stepUnit * 3 + 320\r
+    yPos = COS(angleIndex) * stepUnit + 250\r
+    yPos = yPos - (COS(angleIndex / 31) * 200)\r
+    angles(spiralLength) = angleIndex\r
+    phaseAngles(spiralLength) = angleIndex / 31\r
+    spiralX(spiralLength) = xPos\r
+    spiralY(spiralLength) = yPos\r
+    PSET (xPos, yPos), 15\r
+NEXT angleIndex\r
+\r
+' Load texture data from file\r
 OPEN "texture.dat" FOR INPUT AS #1\r
-DIM SHARED text$(1 TO 1000)\r
-a = 0\r
+DIM SHARED textureData$(1 TO 1000)\r
+textureIndex = 0\r
 1\r
-LINE INPUT #1, a$\r
-IF LEFT$(a$, 3) = "END" THEN GOTO 2\r
-a = a + 1\r
-text$(a) = a$\r
+    LINE INPUT #1, textureLine$\r
+    IF LEFT$(textureLine$, 3) = "END" THEN GOTO 2\r
+    textureIndex = textureIndex + 1\r
+    textureData$(textureIndex) = textureLine$\r
 GOTO 1\r
 2\r
-CLOSE #1\r
 CLS\r
-a = 1\r
-FOR c = 1 TO 20\r
-FOR b = 1 TO LEN(text$(c))\r
-a$ = RIGHT$(LEFT$(text$(c), b), 1)\r
-a = a + 1\r
-IF a > tor - 43 THEN GOTO 3\r
-tee = SIN(sin1(a + 32))\r
-tee = tee - COS(cos1(a))\r
 \r
-IF tee <= 0 THEN\r
-LINE (torux(a), toruy(a))-(torux(a + 1), toruy(a + 1)), 15\r
-LINE (torux(a), toruy(a))-(torux(a + 42), toruy(a + 42)), 15\r
-IF a$ = "M" THEN fill torux(a), toruy(a), torux(a + 1), toruy(a + 1), torux(a + 42), toruy(a + 42), torux(a + 43), toruy(a + 43)\r
-END IF\r
+' Apply texture to the spiral\r
+textureIndex = 1\r
+FOR charIndex = 1 TO 20\r
+    FOR textCharIndex = 1 TO LEN(textureData$(charIndex))\r
+        textureChar$ = RIGHT$(LEFT$(textureData$(charIndex), textCharIndex), 1)\r
+        textureIndex = textureIndex + 1\r
+        IF textureIndex > spiralLength - 43 THEN GOTO DONE\r
+        teeVal = SIN(angles(textureIndex + 32)) - COS(phaseAngles(textureIndex))\r
 \r
-NEXT b\r
-NEXT c\r
-3\r
+        ' Draw lines if the condition is met\r
+        IF teeVal <= 0 THEN\r
+            LINE (spiralX(textureIndex), spiralY(textureIndex))-(spiralX(textureIndex + 1), spiralY(textureIndex + 1)), 15\r
+            LINE (spiralX(textureIndex), spiralY(textureIndex))-(spiralX(textureIndex + 42), spiralY(textureIndex + 42)), 15\r
+            ' Fill the segment if the character matches\r
+            IF textureChar$ = "M" THEN\r
+                CALL FillSegment(spiralX(textureIndex), spiralY(textureIndex), spiralX(textureIndex + 1), spiralY(textureIndex + 1), spiralX(textureIndex + 42), spiralY(textureIndex + 42), spiralX(textureIndex + 43), spiralY(textureIndex + 43))\r
+            END IF\r
+        END IF\r
+    NEXT textCharIndex\r
+NEXT charIndex\r
+DONE:\r
 a$ = INPUT$(1)\r
 SYSTEM\r
 \r
-SUB fill (zx1, zy1, zx2, zy2, zxx1, zyy1, zxx2, zyy2)\r
-x1 = zx1\r
-y1 = zy1\r
-x2 = zx2\r
-y2 = zy2\r
-xx1 = zxx1\r
-yy1 = zyy1\r
-xx2 = zxx2\r
-yy2 = zyy2\r
-j = 10\r
-x3 = (x2 - x1) / j\r
-y3 = (y2 - y1) / j\r
-xx3 = (xx2 - xx1) / j\r
-yy3 = (yy2 - yy1) / j\r
-FOR a = 1 TO j\r
-x1 = x1 + x3\r
-y1 = y1 + y3\r
-xx1 = xx1 + xx3\r
-yy1 = yy1 + yy3\r
-LINE (x1, y1)-(xx1, yy1), 15\r
-NEXT a\r
+' Subroutine to fill a segment with lines\r
+SUB FillSegment (x1, y1, x2, y2, xx1, yy1, xx2, yy2)\r
+    ' Assign input parameters to local variables\r
+    xStart = x1\r
+    yStart = y1\r
+    xEnd = x2\r
+    yEnd = y2\r
+    xxStart = xx1\r
+    yyStart = yy1\r
+    xxEnd = xx2\r
+    yyEnd = yy2\r
+\r
+    ' Calculate step increments\r
+    j = 10\r
+    xStep = (xEnd - xStart) / j\r
+    yStep = (yEnd - yStart) / j\r
+    xxStep = (xxEnd - xxStart) / j\r
+    yyStep = (yyEnd - yyStart) / j\r
+\r
+    ' Draw lines between the points\r
+    FOR a = 1 TO j\r
+        xStart = xStart + xStep\r
+        yStart = yStart + yStep\r
+        xxStart = xxStart + xxStep\r
+        yyStart = yyStart + yyStep\r
+        LINE (xStart, yStart)-(xxStart, yyStart), 15\r
+    NEXT a\r
 END SUB\r
 \r