Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 19 Aug 2024 09:36:45 +0000 (12:36 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 19 Aug 2024 09:36:45 +0000 (12:36 +0300)
Graphics/3D/gravi.bas

index 40592c8..e670dbf 100755 (executable)
-' 3D gravitation model\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB gravi ()\r
-DECLARE SUB adda (x!, y!, z!, s!)\r
-DECLARE SUB display ()\r
-DIM SHARED atx(1 TO 100)\r
-DIM SHARED aty(1 TO 100)\r
-DIM SHARED atz(1 TO 100)\r
-DIM SHARED atxs(1 TO 100)\r
-DIM SHARED atys(1 TO 100)\r
-DIM SHARED atzs(1 TO 100)\r
-DIM SHARED ats(1 TO 100)\r
-DIM SHARED mitu\r
-DIM SHARED myx, myy, myz\r
-DIM SHARED oax(1 TO 100)\r
-DIM SHARED oay(1 TO 100)\r
-DIM SHARED oas(1 TO 100)\r
-\r
-\r
-myx = 0\r
-myy = 0\r
-myz = -5\r
-mitu = 0\r
+' Program to simulate gravitational forces between atoms.\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
+\r
+DECLARE SUB Gravitate ()\r
+DECLARE SUB AddAtom (x AS SINGLE, y AS SINGLE, z AS SINGLE, size AS SINGLE)\r
+DECLARE SUB DisplaySystem ()\r
+\r
+DIM SHARED atomX(1 TO 100)\r
+DIM SHARED atomY(1 TO 100)\r
+DIM SHARED atomZ(1 TO 100)\r
+DIM SHARED atomXSpeed(1 TO 100)\r
+DIM SHARED atomYSpeed(1 TO 100)\r
+DIM SHARED atomZSpeed(1 TO 100)\r
+DIM SHARED atomSize(1 TO 100)\r
+DIM SHARED countOfAtoms\r
+DIM SHARED myX, myY, myZ\r
+DIM SHARED oldAtomX(1 TO 100)\r
+DIM SHARED oldAtomY(1 TO 100)\r
+DIM SHARED oldAtomSize(1 TO 100)\r
+\r
+myX = 0\r
+myY = 0\r
+myZ = -5\r
+countOfAtoms = 0\r
 \r
 SCREEN 13\r
 \r
 FOR a = 1 TO 30\r
-adda RND * 6 - 3, RND * 6 - 3, RND * 4, 50\r
+    AddAtom RND * 6 - 3, RND * 6 - 3, RND * 4, 50\r
 NEXT a\r
 \r
 1\r
-display\r
-gravi\r
-IF INKEY$ <> "" THEN SYSTEM\r
+    DisplaySystem\r
+    Gravitate\r
+    IF INKEY$ <> "" THEN SYSTEM\r
 GOTO 1\r
 \r
-SUB adda (x, y, z, s)\r
-\r
-mitu = mitu + 1\r
-atx(mitu) = x\r
-aty(mitu) = y\r
-atz(mitu) = z\r
-ats(mitu) = s\r
-\r
-atxs(mitu) = 0\r
-atys(mitu) = 0\r
-atzs(mitu) = 0\r
+SUB AddAtom (x, y, z, size)\r
+    countOfAtoms = countOfAtoms + 1\r
+    atomX(countOfAtoms) = x\r
+    atomY(countOfAtoms) = y\r
+    atomZ(countOfAtoms) = z\r
+    atomSize(countOfAtoms) = size\r
 \r
+    atomXSpeed(countOfAtoms) = 0\r
+    atomYSpeed(countOfAtoms) = 0\r
+    atomZSpeed(countOfAtoms) = 0\r
 END SUB\r
 \r
-SUB display\r
-\r
-FOR a = 1 TO mitu\r
-x = atx(a) - myx\r
-y = aty(a) - myy\r
-z = atz(a) - myz\r
-\r
-x1 = x / z * 100 + 160\r
-y1 = y / z * 100 + 100\r
-\r
-CIRCLE (oax(a), oay(a)), oas(a), 0\r
-CIRCLE (x1, y1), ats(a) / z, 15\r
-oax(a) = x1\r
-oay(a) = y1\r
-oas(a) = ats(a) / z\r
-\r
-NEXT a\r
-\r
-\r
+SUB DisplaySystem\r
+    FOR a = 1 TO countOfAtoms\r
+        x = atomX(a) - myX\r
+        y = atomY(a) - myY\r
+        z = atomZ(a) - myZ\r
+\r
+        x1 = x / z * 100 + 160\r
+        y1 = y / z * 100 + 100\r
+\r
+        CIRCLE (oldAtomX(a), oldAtomY(a)), oldAtomSize(a), 0\r
+        CIRCLE (x1, y1), atomSize(a) / z, 15\r
+        oldAtomX(a) = x1\r
+        oldAtomY(a) = y1\r
+        oldAtomSize(a) = atomSize(a) / z\r
+    NEXT a\r
 END SUB\r
 \r
-SUB gravi\r
-FOR a = 1 TO mitu\r
-x = atx(a)\r
-y = aty(a)\r
-z = atz(a)\r
-pxs = 0\r
-pys = 0\r
-pzs = 0\r
-\r
-\r
-FOR b = 1 TO mitu\r
-IF b = a THEN GOTO 2\r
-v = SQR((atx(b) - x) ^ 2 + (aty(b) - y) ^ 2 + (atz(b) - z) ^ 2)\r
-v2 = 1 / (v - 1)\r
-\r
-pxs = pxs + (atx(b) - x) / v2 / 10000\r
-pys = pys + (aty(b) - y) / v2 / 10000\r
-pzs = pzs + (atz(b) - z) / v2 / 10000\r
-\r
-2\r
-NEXT b\r
-\r
-atxs(a) = atxs(a) / 1.01 + pxs\r
-atys(a) = atys(a) / 1.01 + pys\r
-atzs(a) = atzs(a) / 1.01 + pzs\r
-NEXT a\r
-\r
-FOR a = 1 TO mitu\r
-\r
-atx(a) = atx(a) + atxs(a)\r
-aty(a) = aty(a) + atys(a)\r
-atz(a) = atz(a) + atzs(a)\r
-NEXT a\r
-\r
-\r
-\r
+SUB Gravitate\r
+    DIM pxs, pys, pzs\r
+\r
+    FOR a = 1 TO countOfAtoms\r
+        x = atomX(a)\r
+        y = atomY(a)\r
+        z = atomZ(a)\r
+        pxs = 0\r
+        pys = 0\r
+        pzs = 0\r
+\r
+        FOR b = 1 TO countOfAtoms\r
+            IF b = a THEN GOTO 2\r
+            v = SQR((atomX(b) - x) ^ 2 + (atomY(b) - y) ^ 2 + (atomZ(b) - z) ^ 2)\r
+            v2 = 1 / (v - 1)\r
+\r
+            pxs = pxs + (atomX(b) - x) / v2 / 10000\r
+            pys = pys + (atomY(b) - y) / v2 / 10000\r
+            pzs = pzs + (atomZ(b) - z) / v2 / 10000\r
+\r
+2          NEXT b\r
+\r
+        atomXSpeed(a) = atomXSpeed(a) / 1.01 + pxs\r
+        atomYSpeed(a) = atomYSpeed(a) / 1.01 + pys\r
+        atomZSpeed(a) = atomZSpeed(a) / 1.01 + pzs\r
+    NEXT a\r
+\r
+    FOR a = 1 TO countOfAtoms\r
+        atomX(a) = atomX(a) + atomXSpeed(a)\r
+        atomY(a) = atomY(a) + atomYSpeed(a)\r
+        atomZ(a) = atomZ(a) + atomZSpeed(a)\r
+    NEXT a\r
 END SUB\r
 \r