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

index c00b2f6..d44a8f3 100755 (executable)
-DECLARE SUB ruut (x!, y!, z!)\r
-' use:\r
-' arrow keys - move around\r
-' 2, 6, 4, 8 - look around\r
-' -          - fly up\r
-' +          - fly down\r
-\r
-\r
-\r
-DECLARE SUB mkkoll ()\r
-DECLARE SUB putkol ()\r
-DECLARE SUB rend ()\r
-DECLARE SUB env ()\r
-DECLARE SUB start ()\r
-DIM SHARED npo, nlo, np, nl\r
-DIM SHARED px(1 TO 3000)\r
-DIM SHARED py(1 TO 3000)\r
-DIM SHARED pz(1 TO 3000)\r
-DIM SHARED rpx(1 TO 7000)\r
-DIM SHARED rpy(1 TO 7000)\r
-DIM SHARED orpx(0 TO 9000)\r
-DIM SHARED orpy(0 TO 9000)\r
-DIM SHARED onp\r
-DIM SHARED lin1(1 TO 3800)\r
-DIM SHARED lin2(1 TO 3800)\r
-DIM SHARED linc(1 TO 3800)\r
-DIM SHARED olin1(1 TO 3800)\r
-DIM SHARED olin2(1 TO 3800)\r
-DIM SHARED onl\r
-DIM SHARED myx, myy, myz\r
-DIM SHARED myxs, myys, myzs\r
-DIM SHARED an1, an2\r
-DIM SHARED an1s, an2s\r
-DIM SHARED frm\r
-\r
-DIM SHARED life(1 TO 50, 1 TO 50)\r
-DIM SHARED life2(1 TO 50, 1 TO 50)\r
-\r
-\r
-\r
-start\r
-'env\r
-\r
-an1 = 1.5\r
-1\r
-frm = frm + 1\r
-\r
-mkkoll\r
-rend\r
-\r
-myx = SIN(frm / 20) * 12\r
-myy = SIN(frm / 50) * 10 + 15\r
-myz = COS(frm / 20) * 12\r
-\r
-an1 = an1 - .05\r
-an2 = 2.2 + SIN(frm / 50) / 2\r
-\r
-a$ = INKEY$\r
-IF a$ <> "" THEN\r
-  SYSTEM\r
-END IF\r
-GOTO 1\r
-\r
-SUB env\r
-\r
-FOR z = -5 TO 5\r
-FOR x = -5 TO 5\r
-np = np + 1\r
-px(np) = x\r
-py(np) = 0\r
-pz(np) = z\r
-IF x > -5 THEN\r
-nl = nl + 1\r
-lin1(nl) = np\r
-lin2(nl) = np - 1\r
-linc(nl) = 1\r
-END IF\r
-IF z > -5 THEN\r
-nl = nl + 1\r
-lin1(nl) = np\r
-lin2(nl) = np - 11\r
-linc(nl) = 1\r
-END IF\r
-NEXT x\r
-NEXT z\r
-\r
-npo = np\r
-nlo = nl\r
-\r
-\r
-END SUB\r
-\r
-SUB env1\r
-\r
-np = 1\r
-px(np) = -2\r
-py(np) = 0\r
-pz(np) = 0\r
-np = np + 1\r
-px(np) = 2\r
-py(np) = 0\r
-pz(np) = 0\r
-\r
-nl = 1\r
-lin1(nl) = 1\r
-lin2(nl) = 2\r
-linc(nl) = 14\r
-\r
-END SUB\r
-\r
-SUB mkkoll\r
-np = npo\r
-nl = nlo\r
+DECLARE SUB PlaceCube (x!, y!, z!)\r
+DECLARE SUB DrawCube (x!, y!, z!)\r
+\r
+DECLARE SUB CreateCollisionData ()\r
+DECLARE SUB UpdateCollisionData ()\r
+DECLARE SUB RenderScene ()\r
+DECLARE SUB InitializeEnvironment ()\r
+DECLARE SUB StartGame ()\r
+DIM SHARED numPoints, numLines, pointCount, lineCount\r
+DIM SHARED pointsX(1 TO 3000), pointsY(1 TO 3000), pointsZ(1 TO 3000)\r
+DIM SHARED renderedPointsX(1 TO 7000), renderedPointsY(1 TO 7000)\r
+DIM SHARED originalRenderedPointsX(0 TO 9000), originalRenderedPointsY(0 TO 9000)\r
+DIM SHARED oldPointCount, oldLineCount\r
+DIM SHARED lineVertices1(1 TO 3800), lineVertices2(1 TO 3800), lineColors(1 TO 3800)\r
+DIM SHARED originalLineVertices1(1 TO 3800), originalLineVertices2(1 TO 3800)\r
+DIM SHARED myPositionX, myPositionY, myPositionZ\r
+DIM SHARED myPreviousPositionX, myPreviousPositionY, myPreviousPositionZ\r
+DIM SHARED angle1, angle2\r
+DIM SHARED angle1Str, angle2Str\r
+DIM SHARED frameCount\r
+\r
+DIM SHARED gameOfLifeGrid(1 TO 50, 1 TO 50)\r
+DIM SHARED nextGameOfLifeGrid(1 TO 50, 1 TO 50)\r
+\r
+StartGame\r
+' InitializeEnvironment\r
+\r
+angle1 = 1.5\r
+10\r
+frameCount = frameCount + 1\r
+\r
+CreateCollisionData\r
+RenderScene\r
+\r
+myPositionX = SIN(frameCount / 20) * 12\r
+myPositionY = SIN(frameCount / 50) * 10 + 15\r
+myPositionZ = COS(frameCount / 20) * 12\r
+\r
+angle1 = angle1 - .05\r
+angle2 = 2.2 + SIN(frameCount / 50) / 2\r
+\r
+inputKey$ = INKEY$\r
+IF inputKey$ <> "" THEN SYSTEM\r
+GOTO 10\r
+\r
+SUB CreateCollisionData\r
+pointCount = numPoints\r
+lineCount = numLines\r
 \r
 FOR y = 1 TO 50\r
   FOR x = 1 TO 50\r
-    IF life(x, y) = 1 THEN\r
-       v = ABS(x - 26) + ABS(y - 26) + frm\r
-       ruut x - 25, SIN(v / 5) * 5, y - 25\r
+    IF gameOfLifeGrid(x, y) = 1 THEN\r
+       v = ABS(x - 26) + ABS(y - 26) + frameCount\r
+       PlaceCube x - 25, SIN(v / 5) * 5, y - 25\r
     END IF\r
  NEXT x\r
 NEXT y\r
 \r
-\r
-\r
-IF frm \ 10 = frm / 10 THEN\r
+IF frameCount \ 10 = frameCount / 10 THEN\r
 \r
 FOR y = 2 TO 49\r
 FOR x = 2 TO 49\r
-c = life(x - 1, y - 1)\r
-c = c + life(x, y - 1)\r
-c = c + life(x + 1, y - 1)\r
-c = c + life(x - 1, y)\r
-c = c + life(x + 1, y)\r
-c = c + life(x - 1, y + 1)\r
-c = c + life(x, y + 1)\r
-c = c + life(x + 1, y + 1)\r
-\r
-IF life(x, y) = 1 THEN\r
-  IF (c > 3) OR (c < 2) THEN life2(x, y) = 0 ELSE life2(x, y) = 1\r
+c = gameOfLifeGrid(x - 1, y - 1)\r
+c = c + gameOfLifeGrid(x, y - 1)\r
+c = c + gameOfLifeGrid(x + 1, y - 1)\r
+c = c + gameOfLifeGrid(x - 1, y)\r
+c = c + gameOfLifeGrid(x + 1, y)\r
+c = c + gameOfLifeGrid(x - 1, y + 1)\r
+c = c + gameOfLifeGrid(x, y + 1)\r
+c = c + gameOfLifeGrid(x + 1, y + 1)\r
+\r
+IF gameOfLifeGrid(x, y) = 1 THEN\r
+  IF (c > 3) OR (c < 2) THEN nextGameOfLifeGrid(x, y) = 0 ELSE nextGameOfLifeGrid(x, y) = 1\r
 ELSE\r
-  IF c = 3 THEN life2(x, y) = 1 ELSE life2(x, y) = 0\r
+  IF c = 3 THEN nextGameOfLifeGrid(x, y) = 1 ELSE nextGameOfLifeGrid(x, y) = 0\r
 END IF\r
 NEXT x\r
 NEXT y\r
 \r
-\r
 FOR y = 1 TO 50\r
 FOR x = 1 TO 50\r
-  life(x, y) = life2(x, y)\r
+  gameOfLifeGrid(x, y) = nextGameOfLifeGrid(x, y)\r
 NEXT x\r
 NEXT y\r
 END IF\r
 \r
 END SUB\r
 \r
-SUB rend\r
+SUB InitializeEnvironment\r
+FOR z = -5 TO 5\r
+FOR x = -5 TO 5\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x\r
+pointsY(pointCount) = 0\r
+pointsZ(pointCount) = z\r
+IF x > -5 THEN\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount\r
+lineVertices2(lineCount) = pointCount - 1\r
+lineColors(lineCount) = 1\r
+END IF\r
+IF z > -5 THEN\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount\r
+lineVertices2(lineCount) = pointCount - 10\r
+lineColors(lineCount) = 1\r
+END IF\r
+NEXT x\r
+NEXT z\r
+\r
+numPoints = pointCount\r
+numLines = lineCount\r
+\r
+END SUB\r
+\r
+SUB InitializeEnvironment1\r
+pointCount = 1\r
+pointsX(pointCount) = -2\r
+pointsY(pointCount) = 0\r
+pointsZ(pointCount) = 0\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = 2\r
+pointsY(pointCount) = 0\r
+pointsZ(pointCount) = 0\r
+\r
+lineCount = 1\r
+lineVertices1(lineCount) = 1\r
+lineVertices2(lineCount) = 2\r
+lineColors(lineCount) = 14\r
+\r
+END SUB\r
+\r
+SUB PlaceCube (x, y, z)\r
+\r
+v = 3\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 1\r
+lineVertices2(lineCount) = pointCount + 2\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 2\r
+lineVertices2(lineCount) = pointCount + 3\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 3\r
+lineVertices2(lineCount) = pointCount + 4\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 4\r
+lineVertices2(lineCount) = pointCount + 1\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 5\r
+lineVertices2(lineCount) = pointCount + 6\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 6\r
+lineVertices2(lineCount) = pointCount + 7\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 7\r
+lineVertices2(lineCount) = pointCount + 8\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 8\r
+lineVertices2(lineCount) = pointCount + 5\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 1\r
+lineVertices2(lineCount) = pointCount + 5\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 2\r
+lineVertices2(lineCount) = pointCount + 6\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 3\r
+lineVertices2(lineCount) = pointCount + 7\r
+lineColors(lineCount) = v\r
+\r
+lineCount = lineCount + 1\r
+lineVertices1(lineCount) = pointCount + 4\r
+lineVertices2(lineCount) = pointCount + 8\r
+lineColors(lineCount) = v\r
+\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x - .5\r
+pointsY(pointCount) = y\r
+pointsZ(pointCount) = z - .5\r
+\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x + .5\r
+pointsY(pointCount) = y\r
+pointsZ(pointCount) = z - .5\r
+\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x + .5\r
+pointsY(pointCount) = y\r
+pointsZ(pointCount) = z + .5\r
+\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x - .5\r
+pointsY(pointCount) = y\r
+pointsZ(pointCount) = z + .5\r
+\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x - .5\r
+pointsY(pointCount) = y + 1\r
+pointsZ(pointCount) = z - .5\r
+\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x + .5\r
+pointsY(pointCount) = y + 1\r
+pointsZ(pointCount) = z - .5\r
+\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x + .5\r
+pointsY(pointCount) = y + 1\r
+pointsZ(pointCount) = z + .5\r
+\r
+pointCount = pointCount + 1\r
+pointsX(pointCount) = x - .5\r
+pointsY(pointCount) = y + 1\r
+pointsZ(pointCount) = z + .5\r
+\r
+END SUB\r
+\r
+SUB RenderScene\r
 \r
+sineAngle1 = SIN(angle1)\r
+cosineAngle1 = COS(angle1)\r
+sineAngle2 = SIN(angle2)\r
+cosineAngle2 = COS(angle2)\r
 \r
-s1 = SIN(an1)\r
-c1 = COS(an1)\r
-s2 = SIN(an2)\r
-c2 = COS(an2)\r
+FOR a = 1 TO pointCount\r
+x = pointsX(a) + myPositionX\r
+y = pointsY(a) - myPositionY\r
+z = pointsZ(a) + myPositionZ\r
+\r
+x1 = x * sineAngle1 - z * cosineAngle1\r
+z1 = x * cosineAngle1 + z * sineAngle1\r
+y1 = y * sineAngle2 - z1 * cosineAngle2\r
+z2 = y * cosineAngle2 + z1 * sineAngle2\r
 \r
-FOR a = 1 TO np\r
-x = px(a) + myx\r
-y = py(a) - myy\r
-z = pz(a) + myz\r
-      \r
-x1 = x * s1 - z * c1\r
-z1 = x * c1 + z * s1\r
-y1 = y * s2 - z1 * c2\r
-z2 = y * c2 + z1 * s2\r
-    \r
 IF z2 < .5 THEN\r
-rpx(a) = -1\r
+renderedPointsX(a) = -1\r
 ELSE\r
-rpx(a) = 320 + (x1 / z2 * 400)\r
-rpy(a) = 240 - (y1 / z2 * 400)\r
+renderedPointsX(a) = 320 + (x1 / z2 * 400)\r
+renderedPointsY(a) = 240 - (y1 / z2 * 400)\r
 END IF\r
 NEXT a\r
-    \r
-\r
-FOR a = 1 TO nl\r
-l1 = olin1(a)\r
-l2 = olin2(a)\r
-\r
-IF orpx(l1) = -1 OR orpx(l2) = -1 THEN  ELSE LINE (orpx(l1), orpy(l1))-(orpx(l2), orpy(l2)), 0\r
-l1 = lin1(a)\r
-l2 = lin2(a)\r
-IF rpx(l1) = -1 OR rpx(l2) = -1 THEN  ELSE LINE (rpx(l1), rpy(l1))-(rpx(l2), rpy(l2)), linc(a)\r
-NEXT\r
-\r
-IF nl < onl THEN\r
-FOR a = nl + 1 TO onl\r
-l1 = olin1(a)\r
-l2 = olin2(a)\r
-IF orpx(l1) = -1 OR orpx(l2) = -1 THEN  ELSE LINE (orpx(l1), orpy(l1))-(orpx(l2), orpy(l2)), 0\r
-NEXT\r
-END IF\r
 \r
-FOR a = 1 TO np\r
-orpx(a) = rpx(a)\r
-orpy(a) = rpy(a)\r
-NEXT a\r
-onp = np\r
+FOR a = 1 TO lineCount\r
+l1 = originalLineVertices1(a)\r
+l2 = originalLineVertices2(a)\r
 \r
-FOR a = 1 TO nl\r
-olin1(a) = lin1(a)\r
-olin2(a) = lin2(a)\r
+IF originalRenderedPointsX(l1) = -1 OR originalRenderedPointsX(l2) = -1 THEN  ELSE LINE (originalRenderedPointsX(l1), originalRenderedPointsY(l1))-(originalRenderedPointsX(l2), originalRenderedPointsY(l2)), 0\r
+l1 = lineVertices1(a)\r
+l2 = lineVertices2(a)\r
+IF renderedPointsX(l1) = -1 OR renderedPointsX(l2) = -1 THEN  ELSE LINE (renderedPointsX(l1), renderedPointsY(l1))-(renderedPointsX(l2), renderedPointsY(l2)), lineColors(a)\r
 NEXT a\r
-onl = nl\r
-\r
-END SUB\r
 \r
-SUB ruut (x, y, z)\r
-\r
-v = 3\r
+IF lineCount < oldLineCount THEN\r
+FOR a = lineCount + 1 TO oldLineCount\r
+l1 = originalLineVertices1(a)\r
+l2 = originalLineVertices2(a)\r
+IF originalRenderedPointsX(l1) = -1 OR originalRenderedPointsX(l2) = -1 THEN  ELSE LINE (originalRenderedPointsX(l1), originalRenderedPointsY(l1))-(originalRenderedPointsX(l2), originalRenderedPointsY(l2)), 0\r
+NEXT a\r
+END IF\r
 \r
-nl = nl + 1\r
-lin1(nl) = np + 1\r
-lin2(nl) = np + 2\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 2\r
-lin2(nl) = np + 3\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 3\r
-lin2(nl) = np + 4\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 4\r
-lin2(nl) = np + 1\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 5\r
-lin2(nl) = np + 6\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 6\r
-lin2(nl) = np + 7\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 7\r
-lin2(nl) = np + 8\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 8\r
-lin2(nl) = np + 5\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 1\r
-lin2(nl) = np + 5\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 2\r
-lin2(nl) = np + 6\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 3\r
-lin2(nl) = np + 7\r
-linc(nl) = v\r
-\r
-nl = nl + 1\r
-lin1(nl) = np + 4\r
-lin2(nl) = np + 8\r
-linc(nl) = v\r
-\r
-np = np + 1\r
-px(np) = x - .5\r
-py(np) = y\r
-pz(np) = z - .5\r
-\r
-np = np + 1\r
-px(np) = x + .5\r
-py(np) = y\r
-pz(np) = z - .5\r
-\r
-np = np + 1\r
-px(np) = x + .5\r
-py(np) = y\r
-pz(np) = z + .5\r
-\r
-np = np + 1\r
-px(np) = x - .5\r
-py(np) = y\r
-pz(np) = z + .5\r
-\r
-\r
-np = np + 1\r
-px(np) = x - .5\r
-py(np) = y + 1\r
-pz(np) = z - .5\r
-\r
-np = np + 1\r
-px(np) = x + .5\r
-py(np) = y + 1\r
-pz(np) = z - .5\r
-\r
-np = np + 1\r
-px(np) = x + .5\r
-py(np) = y + 1\r
-pz(np) = z + .5\r
-\r
-np = np + 1\r
-px(np) = x - .5\r
-py(np) = y + 1\r
-pz(np) = z + .5\r
+FOR a = 1 TO pointCount\r
+originalRenderedPointsX(a) = renderedPointsX(a)\r
+originalRenderedPointsY(a) = renderedPointsY(a)\r
+NEXT a\r
+oldPointCount = pointCount\r
 \r
+FOR a = 1 TO lineCount\r
+originalLineVertices1(a) = lineVertices1(a)\r
+originalLineVertices2(a) = lineVertices2(a)\r
+NEXT a\r
+oldLineCount = lineCount\r
 \r
 END SUB\r
 \r
-SUB start\r
+SUB StartGame\r
 SCREEN 12\r
-npo = 0\r
-nlo = 0\r
-np = npo\r
-nl = nlo\r
-kolm = 50\r
-\r
-myx = 4\r
-myy = 15\r
-myz = 17\r
-an1 = 3.14 / 2 - .29\r
-an2 = an1 + 1\r
+numPoints = 0\r
+numLines = 0\r
+pointCount = numPoints\r
+lineCount = numLines\r
+gridSize = 50\r
+\r
+myPositionX = 4\r
+myPositionY = 15\r
+myPositionZ = 17\r
+angle1 = ATN(1) / 2 - .29\r
+angle2 = angle1 + 1\r
 \r
 FOR a = 1 TO 1000\r
-linc(a) = 4\r
+lineColors(a) = 4\r
 NEXT a\r
 \r
 FOR a = 1 TO 1000\r
-olin1(a) = 1\r
-olin2(a) = 1\r
+originalLineVertices1(a) = 1\r
+originalLineVertices2(a) = 1\r
 NEXT a\r
 \r
-\r
 OPEN "3dlife.dat" FOR INPUT AS #1\r
 y = 20\r
-3\r
-IF EOF(1) <> 0 THEN GOTO 4\r
+20\r
+IF EOF(1) <> 0 THEN GOTO 30\r
 x = 20\r
 \r
-LINE INPUT #1, a$\r
-FOR b = 1 TO LEN(a$)\r
-  c$ = RIGHT$(LEFT$(a$, b), 1)\r
-  IF c$ = "#" THEN life(x, y) = 1\r
+LINE INPUT #1, inputLine$\r
+FOR b = 1 TO LEN(inputLine$)\r
+  c$ = RIGHT$(LEFT$(inputLine$, b), 1)\r
+  IF c$ = "#" THEN gameOfLifeGrid(x, y) = 1\r
   x = x + 1\r
 NEXT b\r
 \r
 y = y + 1\r
-GOTO 3\r
-4\r
+GOTO 20\r
+30\r
 CLOSE #1\r
 \r
 END SUB\r
index 0a62689..28ec08d 100755 (executable)
-' 3D test\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB star (x!, y!, z!, an1!, an2!, an3!)\r
-DECLARE SUB gp (x!, y!, z!, x1!, y1!)\r
-DECLARE SUB stic (x!, y!, z!, an1!, an2!, an3!)\r
-DECLARE SUB gc (x!, y!, z!, x1!, y1!, z1!)\r
-DECLARE SUB gcp (x!, y!, z!, x1!, y1!)\r
-DECLARE SUB setan (alp!, bet!, gam!)\r
-DECLARE SUB start ()\r
-DECLARE SUB drawscr ()\r
-\r
-DIM SHARED mx1, my1, mz1\r
-DIM SHARED mx2, my2, mz2\r
-DIM SHARED mx3, my3, mz3\r
-\r
-DIM SHARED frm, pi\r
-\r
-start\r
+' 3D math test.\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 Star (xAsFloat, yAsFloat, zAsFloat, an1AsFloat, an2AsFloat, an3AsFloat)\r
+DECLARE SUB Gp (xAsFloat, yAsFloat, zAsFloat, x1AsFloat, y1AsFloat)\r
+DECLARE SUB Stic (xAsFloat, yAsFloat, zAsFloat, an1AsFloat, an2AsFloat, an3AsFloat)\r
+DECLARE SUB Gc (xAsFloat, yAsFloat, zAsFloat, x1AsFloat, y1AsFloat, z1AsFloat)\r
+DECLARE SUB Gcp (xAsFloat, yAsFloat, zAsFloat, x1AsFloat, y1AsFloat)\r
+DECLARE SUB Setan (alpAsFloat, betAsFloat, gamAsFloat)\r
+DECLARE SUB Start ()\r
+DECLARE SUB Drawscr ()\r
+\r
+DIM SHARED mx1AsFloat, my1AsFloat, mz1AsFloat\r
+DIM SHARED mx2AsFloat, my2AsFloat, mz2AsFloat\r
+DIM SHARED mx3AsFloat, my3AsFloat, mz3AsFloat\r
+\r
+DIM SHARED frmAsInteger, piAsDouble\r
+\r
+Start\r
 \r
 1\r
 \r
-drawscr\r
-frm = frm + 1\r
+Drawscr\r
+frmAsInteger = frmAsInteger + 1\r
 GOTO 1\r
 \r
-SUB drawscr\r
-\r
-an1 = SIN(frm / 50) / 2\r
-an2 = SIN(frm / 23) / 2 - .5\r
-an3 = 0\r
+SUB Drawscr\r
 \r
-setan an1, an2, an3\r
+an1AsFloat = SIN(frmAsInteger / 50) / 2\r
+an2AsFloat = SIN(frmAsInteger / 23) / 2 - .5\r
+an3AsFloat = 0\r
 \r
-FOR x = -100 TO 100 STEP 10\r
-  FOR z = 0 TO 200 STEP 10\r
-    gcp x, -90, z, x1, y1\r
-    PSET (x1, y1), 15\r
-  NEXT z\r
-NEXT x\r
+Setan an1AsFloat, an2AsFloat, an3AsFloat\r
 \r
-gc -70, -90, 150, x1, y1, z1\r
+FOR xAsInteger = -100 TO 100 STEP 10\r
+  FOR zAsInteger = 0 TO 200 STEP 10\r
+    Gcp xAsInteger, -90, zAsInteger, x1AsFloat, y1AsFloat\r
+    PSET (x1AsFloat, y1AsFloat), 15\r
+  NEXT zAsInteger\r
+NEXT xAsInteger\r
 \r
-stic x1, y1, z1, an1, an2, an3\r
+Gc -70, -90, 150, x1AsFloat, y1AsFloat, z1AsFloat\r
 \r
+Stic x1AsFloat, y1AsFloat, z1AsFloat, an1AsFloat, an2AsFloat, an3AsFloat\r
 \r
 PCOPY 0, 1\r
 CLS\r
 END SUB\r
 \r
-SUB gc (x, y, z, x1, y1, z1)\r
-x1 = x * mx1 + y * my1 + z * mz1\r
-y1 = x * mx2 + y * my2 + z * mz2\r
-z1 = x * mx3 + y * my3 + z * mz3\r
+SUB Gc (xAsFloat, yAsFloat, zAsFloat, x1AsFloat, y1AsFloat, z1AsFloat)\r
+x1AsFloat = xAsFloat * mx1AsFloat + yAsFloat * my1AsFloat + zAsFloat * mz1AsFloat\r
+y1AsFloat = xAsFloat * mx2AsFloat + yAsFloat * my2AsFloat + zAsFloat * mz2AsFloat\r
+z1AsFloat = xAsFloat * mx3AsFloat + yAsFloat * my3AsFloat + zAsFloat * mz3AsFloat\r
 END SUB\r
 \r
-SUB gcp (x, y, z, x1, y1)\r
+SUB Gcp (xAsFloat, yAsFloat, zAsFloat, x1AsFloat, y1AsFloat)\r
 \r
-rx = x * mx1 + y * my1 + z * mz1        ' matrix transformation\r
-ry = x * mx2 + y * my2 + z * mz2\r
-rz = x * mx3 + y * my3 + z * mz3\r
+rxAsFloat = xAsFloat * mx1AsFloat + yAsFloat * my1AsFloat + zAsFloat * mz1AsFloat ' Matrix transformation\r
+ryAsFloat = xAsFloat * mx2AsFloat + yAsFloat * my2AsFloat + zAsFloat * mz2AsFloat\r
+rzAsFloat = xAsFloat * mx3AsFloat + yAsFloat * my3AsFloat + zAsFloat * mz3AsFloat\r
 \r
-rz = rz + 100                           ' perspective calculation\r
-x1 = rx / rz * 120\r
-y1 = ry / rz * 120\r
+rzAsFloat = rzAsFloat + 100 ' Perspective calculation\r
+x1AsFloat = rxAsFloat / rzAsFloat * 120\r
+y1AsFloat = ryAsFloat / rzAsFloat * 120\r
 \r
 END SUB\r
 \r
-SUB gp (x, y, z, x1, y1)\r
-rz = z + 100                           ' perspective calculation\r
-x1 = x / rz * 120\r
-y1 = y / rz * 120\r
+SUB Gp (xAsFloat, yAsFloat, zAsFloat, x1AsFloat, y1AsFloat)\r
+rzAsFloat = zAsFloat + 100 ' Perspective calculation\r
+x1AsFloat = xAsFloat / rzAsFloat * 120\r
+y1AsFloat = yAsFloat / rzAsFloat * 120\r
 END SUB\r
 \r
-SUB setan (alp, bet, gam)\r
-mx1 = SIN(gam) * SIN(bet) * SIN(alp) + COS(gam) * COS(alp)\r
-my1 = COS(bet) * SIN(alp)\r
-mz1 = SIN(gam) * COS(alp) - COS(gam) * SIN(bet) * SIN(alp)\r
+SUB Setan (alpAsFloat, betAsFloat, gamAsFloat)\r
+mx1AsFloat = SIN(gamAsFloat) * SIN(betAsFloat) * SIN(alpAsFloat) + COS(gamAsFloat) * COS(alpAsFloat)\r
+my1AsFloat = COS(betAsFloat) * SIN(alpAsFloat)\r
+mz1AsFloat = SIN(gamAsFloat) * COS(alpAsFloat) - COS(gamAsFloat) * SIN(betAsFloat) * SIN(alpAsFloat)\r
 \r
-mx2 = SIN(gam) * SIN(bet) * COS(alp) - COS(gam) * SIN(alp)\r
-my2 = COS(bet) * COS(alp)\r
-mz2 = -COS(gam) * SIN(bet) * COS(alp) - SIN(gam) * SIN(alp)\r
+mx2AsFloat = SIN(gamAsFloat) * SIN(betAsFloat) * COS(alpAsFloat) - COS(gamAsFloat) * SIN(alpAsFloat)\r
+my2AsFloat = COS(betAsFloat) * COS(alpAsFloat)\r
+mz2AsFloat = -COS(gamAsFloat) * SIN(betAsFloat) * COS(alpAsFloat) - SIN(gamAsFloat) * SIN(alpAsFloat)\r
 \r
-mx3 = -SIN(gam) * COS(bet)\r
-my3 = SIN(bet)\r
-mz3 = COS(gam) * COS(bet)\r
+mx3AsFloat = -SIN(gamAsFloat) * COS(betAsFloat)\r
+my3AsFloat = SIN(betAsFloat)\r
+mz3AsFloat = COS(gamAsFloat) * COS(betAsFloat)\r
 END SUB\r
 \r
-SUB star (x, y, z, an1, an2, an3)\r
-\r
-nan1 = an1\r
-nan2 = an2\r
-nan3 = an3\r
+SUB Star (xAsFloat, yAsFloat, zAsFloat, an1AsFloat, an2AsFloat, an3AsFloat)\r
 \r
-setan nan1, nan2, nan3\r
-gp x, y, z, rx1, ry1\r
+nan1AsFloat = an1AsFloat\r
+nan2AsFloat = an2AsFloat\r
+nan3AsFloat = an3AsFloat\r
 \r
-FOR n = 0 TO pi * 2 - .1 STEP pi / 5\r
-  x1 = SIN(n) * 20\r
-  y1 = COS(n) * 20\r
+Setan nan1AsFloat, nan2AsFloat, nan3AsFloat\r
+Gp xAsFloat, yAsFloat, zAsFloat, rx1AsFloat, ry1AsFloat\r
 \r
-  gc x1, y1, 0, x2, y2, z2\r
-  gp x2 + x, y2 + y, z2 + z, rx2, ry2\r
-CIRCLE (rx2, ry2), 1, 14\r
-LINE (rx2, ry2)-(rx1, ry1), 1\r
-NEXT n\r
+FOR nAsInteger = 0 TO piAsDouble * 2 - .1 STEP piAsDouble / 5\r
+  x1AsFloat = SIN(nAsInteger) * 20\r
+  y1AsFloat = COS(nAsInteger) * 20\r
 \r
+  Gc x1AsFloat, y1AsFloat, 0, x2AsFloat, y2AsFloat, z2AsFloat\r
+  Gp x2AsFloat + xAsFloat, y2AsFloat + yAsFloat, z2AsFloat + zAsFloat, rx2AsFloat, ry2AsFloat\r
+CIRCLE (rx2AsFloat, ry2AsFloat), 1, 14\r
+LINE (rx2AsFloat, ry2AsFloat)-(rx1AsFloat, ry1AsFloat), 1\r
+NEXT nAsInteger\r
 \r
 END SUB\r
 \r
-SUB start\r
+SUB Start\r
 SCREEN 7, , , 1\r
 WINDOW (-160, -100)-(160, 100)\r
 \r
-pi = 3.141592\r
+piAsDouble = 3.141592\r
 \r
 END SUB\r
 \r
-SUB stic (x, y, z, an1, an2, an3)\r
-nan1 = an1\r
-nan2 = an2\r
-nan3 = an3 + frm / 50\r
-\r
-setan nan1, nan2, nan3\r
-gp x, y, z, rx1, ry1\r
-\r
-DIM tmpx(0 TO 5)\r
-DIM tmpy(0 TO 5)\r
-DIM tmpz(0 TO 5)\r
-\r
-DIM tmprx(0 TO 5)\r
-DIM tmpry(0 TO 5)\r
-p = 0\r
-\r
-FOR n = 0 TO pi * 2 - .5 STEP pi / 3\r
-  x1 = SIN(n) * 100\r
-  z1 = COS(n) * 100\r
-\r
-  gc x1, 100, z1, x2, y2, z2\r
-  tmpx(p) = x2 + x\r
-  tmpy(p) = y2 + y\r
-  tmpz(p) = z2 + z\r
-  gp x2 + x, y2 + y, z2 + z, rx2, ry2\r
-  tmprx(p) = rx2\r
-  tmpry(p) = ry2\r
-  LINE (rx1, ry1)-(rx2, ry2), 15\r
\r
-  p = p + 1\r
-NEXT n\r
+SUB Stic (xAsFloat, yAsFloat, zAsFloat, an1AsFloat, an2AsFloat, an3AsFloat)\r
+nan1AsFloat = an1AsFloat\r
+nan2AsFloat = an2AsFloat\r
+nan3AsFloat = an3AsFloat + frmAsInteger / 50\r
+\r
+Setan nan1AsFloat, nan2AsFloat, nan3AsFloat\r
+Gp xAsFloat, yAsFloat, zAsFloat, rx1AsFloat, ry1AsFloat\r
+\r
+DIM tmpx(0 TO 5) AS FLOAT\r
+DIM tmpy(0 TO 5) AS FLOAT\r
+DIM tmpz(0 TO 5) AS FLOAT\r
+\r
+DIM tmprx(0 TO 5) AS FLOAT\r
+DIM tmpry(0 TO 5) AS FLOAT\r
+pAsInteger = 0\r
+\r
+FOR nAsInteger = 0 TO piAsDouble * 2 - .5 STEP piAsDouble / 3\r
+  x1AsFloat = SIN(nAsInteger) * 100\r
+  z1AsFloat = COS(nAsInteger) * 100\r
+\r
+  Gc x1AsFloat, 100, z1AsFloat, x2AsFloat, y2AsFloat, z2AsFloat\r
+  tmpx(pAsInteger) = x2AsFloat + xAsFloat\r
+  tmpy(pAsInteger) = y2AsFloat + yAsFloat\r
+  tmpz(pAsInteger) = z2AsFloat + zAsFloat\r
+  Gp x2AsFloat + xAsFloat, y2AsFloat + yAsFloat, z2AsFloat + zAsFloat, rx2AsFloat, ry2AsFloat\r
+  tmprx(pAsInteger) = rx2AsFloat\r
+  tmpry(pAsInteger) = ry2AsFloat\r
+  LINE (rx1AsFloat, ry1AsFloat)-(rx2AsFloat, ry2AsFloat), 15\r
+\r
+  pAsInteger = pAsInteger + 1\r
+NEXT nAsInteger\r
 \r
 LINE (tmprx(0), tmpry(0))-(tmprx(2), tmpry(2)), 10\r
 LINE (tmprx(2), tmpry(2))-(tmprx(4), tmpry(4)), 10\r
@@ -159,7 +161,6 @@ LINE (tmprx(1), tmpry(1))-(tmprx(3), tmpry(3)), 12
 LINE (tmprx(3), tmpry(3))-(tmprx(5), tmpry(5)), 12\r
 LINE (tmprx(5), tmpry(5))-(tmprx(1), tmpry(1)), 12\r
 \r
-star tmpx(0), tmpy(0), tmpz(0), nan1, nan2, nan3\r
+Star tmpx(0), tmpy(0), tmpz(0), nan1AsFloat, nan2AsFloat, nan3AsFloat\r
 \r
 END SUB\r
-\r