Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 26 Aug 2024 11:57:20 +0000 (14:57 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 26 Aug 2024 11:57:20 +0000 (14:57 +0300)
Graphics/fract3.bas
Graphics/poly.bas

index f738a20..3aa1541 100755 (executable)
@@ -1,73 +1,94 @@
-' Fractal\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB mo (x!, y!, an!, s!, w!)\r
+' Program to render spiral resembling fractal made out of circles.\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 drawFractal (x!, y!, angle!, size!, w!)\r
 DIM SHARED depth\r
 DIM SHARED pi\r
 \r
-DIM SHARED sh1, sh2, sv1, sv2, hp, vp\r
-\r
+DIM SHARED scaleH1, scaleH2, scaleV1, scaleV2, hp, vp\r
 \r
 pi = 3.14128\r
 \r
 SCREEN 12\r
 \r
-\r
-sv1 = 5\r
-sv2 = 2\r
+scaleV1 = 5\r
+scaleV2 = 2\r
 vp = .2\r
 \r
-sh1 = 2\r
-sh2 = 1.4\r
+scaleH1 = 2\r
+scaleH2 = 1.4\r
 hp = .2\r
 \r
-\r
-mo 320, 240, pi - .9, 50, 0\r
+drawFractal 320, 240, pi - .9, 50, 0\r
 \r
 a$ = INPUT$(1)\r
 SYSTEM\r
 \r
-SUB mo (x, y, an, s, w)\r
-depth = depth + 1\r
-IF s < .2 THEN GOTO 1\r
-\r
-IF depth / 2 = depth \ 2 THEN c = 15 ELSE c = 10\r
-\r
-CIRCLE (x, y), s, c\r
-PAINT (x, y), c\r
-\r
-IF w <> 1 THEN\r
-x1 = SIN(an) * s * 2.5 + x\r
-y1 = COS(an) * s * 2.5 + y\r
-IF w = 3 THEN ns = s / sv2 ELSE ns = s / sv1\r
-mo x1, y1, an + vp, ns, 3\r
-END IF\r
-\r
-IF w <> 2 THEN\r
-x1 = SIN(an - pi / 2) * s * 2.5 + x\r
-y1 = COS(an - pi / 2) * s * 2.5 + y\r
-IF w = 4 THEN ns = s / sh2 ELSE ns = s / sh1\r
-mo x1, y1, an + hp, ns, 4\r
-END IF\r
-\r
-IF w <> 3 THEN\r
-x1 = SIN(an - pi) * s * 2.5 + x\r
-y1 = COS(an - pi) * s * 2.5 + y\r
-IF w = 1 THEN ns = s / sv2 ELSE ns = s / sv1\r
-mo x1, y1, an + vp, ns, 1\r
-END IF\r
-\r
-IF w <> 4 THEN\r
-x1 = SIN(an - pi * 1.5) * s * 2.5 + x\r
-y1 = COS(an - pi * 1.5) * s * 2.5 + y\r
-IF w = 2 THEN ns = s / sh2 ELSE ns = s / sh1\r
-mo x1, y1, an + hp, ns, 2\r
-END IF\r
-\r
-1\r
-depth = depth - 1\r
+SUB drawFractal (x, y, angle, size, w)\r
+    depth = depth + 1\r
+    IF size < .2 THEN GOTO 1\r
+\r
+    ' Determine color based on the current depth\r
+    IF depth / 2 = depth \ 2 THEN\r
+        c = 15\r
+    ELSE\r
+        c = 10\r
+    END IF\r
+\r
+    CIRCLE (x, y), size, c\r
+    PAINT (x, y), c\r
+\r
+    ' Recursive calls for different directions\r
+    IF w <> 1 THEN\r
+        x1 = SIN(angle) * size * 2.5 + x\r
+        y1 = COS(angle) * size * 2.5 + y\r
+        IF w = 3 THEN\r
+            newSize = size / scaleV2\r
+        ELSE\r
+            newSize = size / scaleV1\r
+        END IF\r
+        drawFractal x1, y1, angle + vp, newSize, 3\r
+    END IF\r
+\r
+    IF w <> 2 THEN\r
+        x1 = SIN(angle - pi / 2) * size * 2.5 + x\r
+        y1 = COS(angle - pi / 2) * size * 2.5 + y\r
+        IF w = 4 THEN\r
+            newSize = size / scaleH2\r
+        ELSE\r
+            newSize = size / scaleH1\r
+        END IF\r
+        drawFractal x1, y1, angle + hp, newSize, 4\r
+    END IF\r
+\r
+    IF w <> 3 THEN\r
+        x1 = SIN(angle - pi) * size * 2.5 + x\r
+        y1 = COS(angle - pi) * size * 2.5 + y\r
+        IF w = 1 THEN\r
+            newSize = size / scaleV2\r
+        ELSE\r
+            newSize = size / scaleV1\r
+        END IF\r
+        drawFractal x1, y1, angle + vp, newSize, 1\r
+    END IF\r
+\r
+    IF w <> 4 THEN\r
+        x1 = SIN(angle - pi * 1.5) * size * 2.5 + x\r
+        y1 = COS(angle - pi * 1.5) * size * 2.5 + y\r
+        IF w = 2 THEN\r
+            newSize = size / scaleH2\r
+        ELSE\r
+            newSize = size / scaleH1\r
+        END IF\r
+        drawFractal x1, y1, angle + hp, newSize, 2\r
+    END IF\r
+\r
+    1\r
+    depth = depth - 1\r
 END SUB\r
-\r
index 89c17d7..52291a5 100755 (executable)
@@ -1,59 +1,64 @@
-' Plygon mapping\r
-' made by Svjatoslav Agejenko\r
-' in 2001\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
+' Program to render polygons at random locations and random colors.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2001,    Initial version\r
+' 2024.08, Improved program readability using AI\r
+\r
 DEFINT A-Z\r
-DECLARE SUB fp (x1, y1, x2, y2, x3, y3, c)\r
+DECLARE SUB fillPolygon (x1, y1, x2, y2, x3, y3, c)\r
 SCREEN 13\r
 \r
-2\r
-x1 = RND * 318 + 1\r
-y1 = RND * 198 + 1\r
-\r
-x2 = RND * 318 + 1\r
-y2 = RND * 198 + 1\r
-\r
-x3 = RND * 318 + 1\r
-y3 = RND * 198 + 1\r
-\r
-\r
-fp x1, y1, x2, y2, x3, y3, RND * 255\r
-IF INKEY$ <> "" THEN SYSTEM\r
-GOTO 2\r
-\r
-SUB fp (x1, y1, x2, y2, x3, y3, c)\r
-DIM yb(-10 TO 210)\r
-\r
-mx1 = x1\r
-my1 = y1\r
-mx2 = x2\r
-my2 = y2\r
-GOSUB mkl\r
-mx1 = x1\r
-my1 = y1\r
-mx2 = x3\r
-my2 = y3\r
-GOSUB mkl\r
-mx1 = x3\r
-my1 = y3\r
-mx2 = x2\r
-my2 = y2\r
-GOSUB mkl\r
-GOTO 1\r
-\r
-mkl:\r
-IF my2 < my1 THEN SWAP my1, my2: SWAP mx1, mx2\r
-FOR y = my1 TO my2 - 1\r
-x = mx1 + (mx2 - mx1) * ((y - my1) / (my2 - my1))\r
-IF yb(y) = 0 THEN\r
-yb(y) = x\r
-ELSE\r
-LINE (x, y)-(yb(y), y), c\r
-END IF\r
-NEXT y\r
+MainLoop:\r
+    x1 = RND * 318 + 1\r
+    y1 = RND * 198 + 1\r
+\r
+    x2 = RND * 318 + 1\r
+    y2 = RND * 198 + 1\r
+\r
+    x3 = RND * 318 + 1\r
+    y3 = RND * 198 + 1\r
+\r
+    fillPolygon x1, y1, x2, y2, x3, y3, RND * 255\r
+    IF INKEY$ <> "" THEN SYSTEM\r
+GOTO MainLoop\r
+\r
+SUB fillPolygon (x1, y1, x2, y2, x3, y3, c)\r
+    DIM yBuffer(-10 TO 210)\r
+\r
+    tempX1 = x1\r
+    tempY1 = y1\r
+    tempX2 = x2\r
+    tempY2 = y2\r
+    GOSUB makeLine\r
+\r
+    tempX1 = x1\r
+    tempY1 = y1\r
+    tempX2 = x3\r
+    tempY2 = y3\r
+    GOSUB makeLine\r
+\r
+    tempX1 = x3\r
+    tempY1 = y3\r
+    tempX2 = x2\r
+    tempY2 = y2\r
+    GOSUB makeLine\r
+\r
+GOTO FillEnd\r
+\r
+makeLine:\r
+    IF tempY2 < tempY1 THEN SWAP tempY1, tempY2: SWAP tempX1, tempX2\r
+    FOR yIndex = tempY1 TO tempY2 - 1\r
+        xPos = tempX1 + (tempX2 - tempX1) * ((yIndex - tempY1) / (tempY2 - tempY1))\r
+        IF yBuffer(yIndex) = 0 THEN\r
+            yBuffer(yIndex) = xPos\r
+        ELSE\r
+            LINE (xPos, yIndex)-(yBuffer(yIndex), yIndex), c\r
+        END IF\r
+    NEXT yIndex\r
 RETURN\r
-1\r
-END SUB\r
 \r
+FillEnd:\r
+END SUB\r