-' Spiral\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
- \r
-DIM SHARED torux(1 TO 10000)\r
-DIM SHARED toruy(1 TO 10000)\r
-DIM SHARED tor\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 shared arrays to hold the x and y coordinates of the spiral\r
+DIM SHARED spiralX(1 TO 10000)\r
+DIM SHARED spiralY(1 TO 10000)\r
+\r
+' Initialize the screen to a graphics mode with 640x480 resolution and 16 colors\r
SCREEN 12\r
-su = 200\r
-tor = 0\r
-FOR a = 0 TO 97.35 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
-torux(tor) = x\r
-toruy(tor) = y\r
-PSET (x, y), 15\r
-NEXT a\r
\r
-FOR a = 97.35 TO 0 STEP -.15\r
-tor = tor + 1\r
-su = SIN(a / 31) * 50\r
-x = SIN(a) * su * 3 + 320\r
-y = COS(a) * su + 350\r
-y = y - (COS(a / 31) * 100)\r
-torux(tor) = x\r
-toruy(tor) = y\r
-PSET (x, y), 15\r
-NEXT a\r
+' Constants for the initial size and the starting value of the index\r
+CONST InitialSize = 100\r
+CONST StartIndex = 0\r
+\r
+' Variable to keep track of the current position in the spiral arrays\r
+DIM torusIndex AS DOUBLE\r
+torusIndex = StartIndex\r
+\r
+' Loop parameters\r
+DIM angle AS DOUBLE\r
+DIM scaleFactor AS DOUBLE\r
+\r
+' Generate the first arm of the spiral\r
+FOR angle = 0 TO 97.35 STEP .15\r
+ torusIndex = torusIndex + 1\r
+ scaleFactor = SIN(angle / 31) * InitialSize\r
+ spiralX(torusIndex) = SIN(angle) * scaleFactor * 3 + 320\r
+ spiralY(torusIndex) = COS(angle) * scaleFactor + 250\r
+ spiralY(torusIndex) = spiralY(torusIndex) - (COS(angle / 31) * 200)\r
+ PSET (spiralX(torusIndex), spiralY(torusIndex)), 15\r
+NEXT angle\r
+\r
+' Generate the second arm of the spiral\r
+FOR angle = 97.35 TO 0 STEP -.15\r
+ torusIndex = torusIndex + 1\r
+ scaleFactor = SIN(angle / 31) * (InitialSize / 2)\r
+ spiralX(torusIndex) = SIN(angle) * scaleFactor * 3 + 320\r
+ spiralY(torusIndex) = COS(angle) * scaleFactor + 350\r
+ spiralY(torusIndex) = spiralY(torusIndex) - (COS(angle / 31) * 100)\r
+ PSET (spiralX(torusIndex), spiralY(torusIndex)), 15\r
+NEXT angle\r
\r
-FOR a = 0 TO 97.35 STEP .15\r
-tor = tor + 1\r
-su = SIN(a / 31) * 25\r
-x = SIN(a) * su * 3 + 320\r
-y = COS(a) * su + 300\r
-y = y - (COS(a / 31) * 50)\r
-torux(tor) = x\r
-toruy(tor) = y\r
-PSET (x, y), 15\r
-NEXT a\r
+' Generate the third arm of the spiral\r
+FOR angle = 0 TO 97.35 STEP .15\r
+ torusIndex = torusIndex + 1\r
+ scaleFactor = SIN(angle / 31) * (InitialSize / 4)\r
+ spiralX(torusIndex) = SIN(angle) * scaleFactor * 3 + 320\r
+ spiralY(torusIndex) = COS(angle) * scaleFactor + 300\r
+ spiralY(torusIndex) = spiralY(torusIndex) - (COS(angle / 31) * 50)\r
+ PSET (spiralX(torusIndex), spiralY(torusIndex)), 15\r
+NEXT angle\r
\r
-FOR a = 97.35 TO 0 STEP -.15\r
-tor = tor + 1\r
-su = SIN(a / 31) * 12.5\r
-x = SIN(a) * su * 3 + 320\r
-y = COS(a) * su + 325\r
-y = y - (COS(a / 31) * 25)\r
-torux(tor) = x\r
-toruy(tor) = y\r
-PSET (x, y), 15\r
-NEXT a\r
+' Generate the fourth arm of the spiral\r
+FOR angle = 97.35 TO 0 STEP -.15\r
+ torusIndex = torusIndex + 1\r
+ scaleFactor = SIN(angle / 31) * (InitialSize / 8)\r
+ spiralX(torusIndex) = SIN(angle) * scaleFactor * 3 + 320\r
+ spiralY(torusIndex) = COS(angle) * scaleFactor + 325\r
+ spiralY(torusIndex) = spiralY(torusIndex) - (COS(angle / 31) * 25)\r
+ PSET (spiralX(torusIndex), spiralY(torusIndex)), 15\r
+NEXT angle\r
\r
-zzx = (tor - 42) / 4\r
+' Calculate the number of lines to draw based on the current index\r
+DIM totalSegments AS DOUBLE\r
+totalSegments = (torusIndex - 42) / 4\r
+\r
+a$ = INPUT$(1)\r
+' Clear the screen before drawing the lines\r
CLS\r
-FOR a = 1 TO zzx * 4\r
-LINE (torux(a), toruy(a))-(torux(a + 42), toruy(a + 42)), 15\r
-LINE (torux(a), toruy(a))-(torux(a + 1), toruy(a + 1)), 15\r
-NEXT a\r
+\r
+' Draw the lines between points in the spiral\r
+FOR angle = 1 TO totalSegments * 4\r
+ LINE (spiralX(angle), spiralY(angle))-(spiralX(angle + 42), spiralY(angle + 42)), 15\r
+ LINE (spiralX(angle), spiralY(angle))-(spiralX(angle + 1), spiralY(angle + 1)), 15\r
+NEXT angle\r
+\r
+' Wait for the user to press a key before exiting\r
a$ = INPUT$(1)\r
+\r
+' End of program\r
SYSTEM\r
\r