-DECLARE SUB init ()\r
-DECLARE SUB pp (x1, y1, x2, y2, c!)\r
-DIM SHARED mul\r
+' Program that computes and plots arbitrary mathematical function on a 2D graph.\r
+' Also it computes and plots the derivative of the function.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 200?, Initial version\r
+' 2024.09, Improved program readability using AI\r
\r
-mul = 50 '<< scale\r
-init\r
\r
-ox = -320 / mul\r
-oy = 0\r
+DECLARE SUB Initialize ()\r
+DECLARE SUB PlotPoint (x, y, x1, y1, c!)\r
+DIM SHARED scaleFactor\r
\r
-FOR x = -320 / mul TO 320 / mul STEP 1 / mul\r
+scaleFactor = 50 ' Scale factor for the graph\r
+Initialize\r
\r
+oldX = -320 / scaleFactor\r
+oldY = 0\r
\r
-t = x ^ 3 - (3 * x) '<< Type your formula there\r
+FOR x = -320 / scaleFactor TO 320 / scaleFactor STEP 1 / scaleFactor\r
\r
+ ' Calculate the function value (replace with your desired formula)\r
+ t = x ^ 3 - (3 * x)\r
\r
-pp x, t, ox, tol, 10\r
-y = (t - tol) * mul\r
-tol = t\r
+ PlotPoint x, t, oldX, prevY, 10\r
+ y = (t - prevY) * scaleFactor\r
+ prevY = t\r
\r
-pp x, y, ox, oy, 14\r
-ox = x\r
-oy = y\r
+ PlotPoint x, y, oldX, oldY, 14\r
+ oldX = x\r
+ oldY = y\r
NEXT x\r
\r
-SUB init\r
-SCREEN 12\r
+SUB Initialize\r
+ SCREEN 12\r
\r
-FOR x = -320 TO 320\r
-IF x / mul = x \ mul THEN LINE (x + 320, 0)-(x + 320, 479), 1\r
-NEXT x\r
+ ' Draw vertical grid lines\r
+ FOR x = -320 TO 320\r
+ IF x / scaleFactor = x \ scaleFactor THEN LINE (x + 320, 0)-(x + 320, 479), 1\r
+ NEXT x\r
\r
-FOR y = -240 TO 240\r
-IF y / mul = y \ mul THEN LINE (0, y + 240)-(639, y + 240), 1\r
-NEXT y\r
+ ' Draw horizontal grid lines\r
+ FOR y = -240 TO 240\r
+ IF y / scaleFactor = y \ scaleFactor THEN LINE (0, y + 240)-(639, y + 240), 1\r
+ NEXT y\r
\r
-FOR x = -320 TO 320\r
-IF x / (mul * 5) = x \ (mul * 5) THEN LINE (x + 320, 0)-(x + 320, 479), 4\r
-NEXT x\r
+ ' Draw thicker vertical grid lines for every 5th unit\r
+ FOR x = -320 TO 320\r
+ IF x / (scaleFactor * 5) = x \ (scaleFactor * 5) THEN LINE (x + 320, 0)-(x + 320, 479), 4\r
+ NEXT x\r
\r
-FOR y = -240 TO 240\r
-IF y / (mul * 5) = y \ (mul * 5) THEN LINE (0, y + 240)-(639, y + 240), 4\r
-NEXT y\r
+ ' Draw thicker horizontal grid lines for every 5th unit\r
+ FOR y = -240 TO 240\r
+ IF y / (scaleFactor * 5) = y \ (scaleFactor * 5) THEN LINE (0, y + 240)-(639, y + 240), 4\r
+ NEXT y\r
\r
+ ' Draw x-axis and y-axis\r
+ LINE (0, 240)-(639, 240), 3\r
+ LINE (320, 0)-(320, 479), 3\r
+END SUB\r
\r
+SUB PlotPoint (x, y, x1, y1, c)\r
\r
-LINE (0, 240)-(639, 240), 3\r
-LINE (320, 0)-(320, 479), 3\r
-END SUB\r
+ x2 = (x * scaleFactor) + 320\r
+ y2 = 240 - (y * scaleFactor)\r
+ x3 = (x1 * scaleFactor) + 320\r
+ y3 = 240 - (y1 * scaleFactor)\r
\r
-SUB pp (x, y, x1, y1, c)\r
-\r
-x2 = (x * mul) + 320\r
-y2 = 240 - (y * mul)\r
-x3 = (x1 * mul) + 320\r
-y3 = 240 - (y1 * mul)\r
-IF x2 < 0 THEN GOTO 1\r
-IF y2 < 0 THEN GOTO 1\r
-IF x2 > 639 THEN GOTO 1\r
-IF y2 > 479 THEN GOTO 1\r
-IF x3 < 0 THEN GOTO 1\r
-IF y3 < 0 THEN GOTO 1\r
-IF x3 > 639 THEN GOTO 1\r
-IF y3 > 479 THEN GOTO 1\r
-LINE (x2, y2)-(x3, y3), c\r
-1\r
-END SUB\r
+ ' Check if the points are within the screen boundaries\r
+ IF x2 < 0 THEN GOTO Skip\r
+ IF y2 < 0 THEN GOTO Skip\r
+ IF x2 > 639 THEN GOTO Skip\r
+ IF y2 > 479 THEN GOTO Skip\r
+ IF x3 < 0 THEN GOTO Skip\r
+ IF y3 < 0 THEN GOTO Skip\r
+ IF x3 > 639 THEN GOTO Skip\r
+ IF y3 > 479 THEN GOTO Skip\r
+\r
+ ' Draw a line between the two points with the specified color\r
+ LINE (x2, y2)-(x3, y3), c\r
\r
+Skip:\r
+END SUB\r