-' 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 sinus1(1 TO 10000)\r
-DIM SHARED sinus2(1 TO 10000)\r
-DIM SHARED tor\r
+' Program to render fancy looking spiral with shaded surface.\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 for storing coordinates and sine values\r
+DIM SHARED spiralX(1 TO 10000)\r
+DIM SHARED spiralY(1 TO 10000)\r
+DIM SHARED sineValue1(1 TO 10000)\r
+DIM SHARED sineValue2(1 TO 10000)\r
+\r
+\r
+' Set the screen mode to 640x480 with 16 colors\r
SCREEN 12\r
-su = 200\r
-tor = 0\r
-FOR a = 1 TO 150 STEP .05\r
-tor = tor + 1\r
-su = 150 - a\r
-x = SIN(a) * su * 3 + 320\r
-y = COS(a) * su + 300\r
-y = y + (SIN((a + 20) / 10) * (a / 5 + 1))\r
-sinus1(tor) = SIN(a)\r
-sinus2(tor) = SIN((a + 20) / 10)\r
-torux(tor) = x\r
-toruy(tor) = y\r
-PSET (x, y), 15\r
-NEXT a\r
-\r
-FOR a = 1 TO tor - 127\r
-LINE (torux(a), toruy(a))-(torux(a + 126), toruy(a + 126)), 15\r
-\r
-tee = 1\r
-IF sinus1(a) > .8 AND sinus2(a) < sinus2(a + 125) THEN tee = 0\r
-IF sinus1(a) < -.2 AND sinus2(a) - .4 > sinus2(a + 125) THEN tee = 0\r
-IF tee = 1 THEN LINE (torux(a), toruy(a))-(torux(a + 1), toruy(a + 1)), 15\r
-\r
-tee = 0\r
-IF sinus1(a) > .8 AND sinus2(a) > sinus2(a + 125) THEN tee = 1\r
-IF sinus1(a) < -.2 AND sinus2(a) < sinus2(a + 125) THEN tee = 1\r
-IF tee = 1 THEN LINE (torux(a), toruy(a))-(torux(a + 127), toruy(a + 127)), 15\r
-\r
-tee = 0\r
-IF sinus1(a) > .9 AND sinus2(a) > sinus2(a + 125) THEN tee = 1\r
-IF sinus1(a) < -.5 AND sinus2(a) < sinus2(a + 125) THEN tee = 1\r
-IF tee = 1 THEN LINE (torux(a), toruy(a))-(torux(a + 125), toruy(a + 125)), 15\r
-\r
-NEXT a\r
\r
+' Initialize the spiral rotation parameter\r
+DIM spiralRotation AS SINGLE\r
+spiralRotation = 0\r
+\r
+' Generate and draw the spiral points\r
+FOR angle = 0 TO 150 STEP .05\r
+ spiralRotation = spiralRotation + 1\r
+ scaleFactor = 150 - angle\r
+\r
+ ' Calculate the X and Y coordinates for the current point\r
+ spiralX(spiralRotation) = SIN(angle) * scaleFactor * 3 + 320\r
+ spiralY(spiralRotation) = COS(angle) * scaleFactor + 300\r
+\r
+ ' Apply additional vertical displacement based on a secondary sine function\r
+ spiralY(spiralRotation) = spiralY(spiralRotation) + (SIN((angle + 20) / 10) * (angle / 5 + 1))\r
+\r
+ ' Store the current sine values for later use\r
+ sineValue1(spiralRotation) = SIN(angle)\r
+ sineValue2(spiralRotation) = SIN((angle + 20) / 10)\r
+\r
+ ' Draw the current point on the screen\r
+ PSET (spiralX(spiralRotation), spiralY(spiralRotation)), 15\r
+NEXT angle\r
+\r
+' Connect the points to form a continuous line\r
+FOR index = 1 TO spiralRotation - 127\r
+ ' Draw a line segment between points 126 steps apart\r
+ LINE (spiralX(index), spiralY(index))-(spiralX(index + 126), spiralY(index + 126)), 15\r
+\r
+ ' Initialize the line drawing flag\r
+ DIM drawLine AS INTEGER\r
+ drawLine = 1\r
+\r
+ ' Check conditions to determine if a line segment should be drawn\r
+ IF sineValue1(index) > .8 AND sineValue2(index) < sineValue2(index + 125) THEN drawLine = 0\r
+ IF sineValue1(index) < -.2 AND (sineValue2(index) - .4) > sineValue2(index + 125) THEN drawLine = 0\r
+\r
+ ' Draw a line segment if the conditions are met\r
+ IF drawLine = 1 THEN LINE (spiralX(index), spiralY(index))-(spiralX(index + 1), spiralY(index + 1)), 15\r
+\r
+ ' Reset the line drawing flag and check for different conditions\r
+ drawLine = 0\r
+ IF sineValue1(index) > .8 AND sineValue2(index) > sineValue2(index + 125) THEN drawLine = 1\r
+ IF sineValue1(index) < -.2 AND sineValue2(index) < sineValue2(index + 125) THEN drawLine = 1\r
+\r
+ ' Draw a line segment if the conditions are met\r
+ IF drawLine = 1 THEN LINE (spiralX(index), spiralY(index))-(spiralX(index + 127), spiralY(index + 127)), 15\r
+\r
+ ' Reset the line drawing flag and check for another set of conditions\r
+ drawLine = 0\r
+ IF sineValue1(index) > .9 AND sineValue2(index) > sineValue2(index + 125) THEN drawLine = 1\r
+ IF sineValue1(index) < -.5 AND sineValue2(index) < sineValue2(index + 125) THEN drawLine = 1\r
+\r
+ ' Draw a line segment if the conditions are met\r
+ IF drawLine = 1 THEN LINE (spiralX(index), spiralY(index))-(spiralX(index + 125), spiralY(index + 125)), 15\r
+NEXT index\r
+\r
+' Wait for a key press before exiting\r
a$ = INPUT$(1)\r
-SYSTEM\r
\r