From: Svjatoslav Agejenko Date: Mon, 19 Aug 2024 09:36:45 +0000 (+0300) Subject: Using AI to improve code readability X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=3197c94db640994a4e7f1966e9917ac007014479;p=qbasicapps.git Using AI to improve code readability --- diff --git a/Graphics/3D/gravi.bas b/Graphics/3D/gravi.bas index 40592c8..e670dbf 100755 --- a/Graphics/3D/gravi.bas +++ b/Graphics/3D/gravi.bas @@ -1,113 +1,107 @@ -' 3D gravitation model -' made by Svjatoslav Agejenko -' in 2003.12 -' H-Page: svjatoslav.eu -' E-Mail: svjatoslav@svjatoslav.eu - -DECLARE SUB gravi () -DECLARE SUB adda (x!, y!, z!, s!) -DECLARE SUB display () -DIM SHARED atx(1 TO 100) -DIM SHARED aty(1 TO 100) -DIM SHARED atz(1 TO 100) -DIM SHARED atxs(1 TO 100) -DIM SHARED atys(1 TO 100) -DIM SHARED atzs(1 TO 100) -DIM SHARED ats(1 TO 100) -DIM SHARED mitu -DIM SHARED myx, myy, myz -DIM SHARED oax(1 TO 100) -DIM SHARED oay(1 TO 100) -DIM SHARED oas(1 TO 100) - - -myx = 0 -myy = 0 -myz = -5 -mitu = 0 +' Program to simulate gravitational forces between atoms. +' By Svjatoslav Agejenko. +' Email: svjatoslav@svjatoslav.eu +' Homepage: http://www.svjatoslav.eu +' +' Changelog: +' 2003.12, Initial version +' 2024.08, Improved program readability using AI + + +DECLARE SUB Gravitate () +DECLARE SUB AddAtom (x AS SINGLE, y AS SINGLE, z AS SINGLE, size AS SINGLE) +DECLARE SUB DisplaySystem () + +DIM SHARED atomX(1 TO 100) +DIM SHARED atomY(1 TO 100) +DIM SHARED atomZ(1 TO 100) +DIM SHARED atomXSpeed(1 TO 100) +DIM SHARED atomYSpeed(1 TO 100) +DIM SHARED atomZSpeed(1 TO 100) +DIM SHARED atomSize(1 TO 100) +DIM SHARED countOfAtoms +DIM SHARED myX, myY, myZ +DIM SHARED oldAtomX(1 TO 100) +DIM SHARED oldAtomY(1 TO 100) +DIM SHARED oldAtomSize(1 TO 100) + +myX = 0 +myY = 0 +myZ = -5 +countOfAtoms = 0 SCREEN 13 FOR a = 1 TO 30 -adda RND * 6 - 3, RND * 6 - 3, RND * 4, 50 + AddAtom RND * 6 - 3, RND * 6 - 3, RND * 4, 50 NEXT a 1 -display -gravi -IF INKEY$ <> "" THEN SYSTEM + DisplaySystem + Gravitate + IF INKEY$ <> "" THEN SYSTEM GOTO 1 -SUB adda (x, y, z, s) - -mitu = mitu + 1 -atx(mitu) = x -aty(mitu) = y -atz(mitu) = z -ats(mitu) = s - -atxs(mitu) = 0 -atys(mitu) = 0 -atzs(mitu) = 0 +SUB AddAtom (x, y, z, size) + countOfAtoms = countOfAtoms + 1 + atomX(countOfAtoms) = x + atomY(countOfAtoms) = y + atomZ(countOfAtoms) = z + atomSize(countOfAtoms) = size + atomXSpeed(countOfAtoms) = 0 + atomYSpeed(countOfAtoms) = 0 + atomZSpeed(countOfAtoms) = 0 END SUB -SUB display - -FOR a = 1 TO mitu -x = atx(a) - myx -y = aty(a) - myy -z = atz(a) - myz - -x1 = x / z * 100 + 160 -y1 = y / z * 100 + 100 - -CIRCLE (oax(a), oay(a)), oas(a), 0 -CIRCLE (x1, y1), ats(a) / z, 15 -oax(a) = x1 -oay(a) = y1 -oas(a) = ats(a) / z - -NEXT a - - +SUB DisplaySystem + FOR a = 1 TO countOfAtoms + x = atomX(a) - myX + y = atomY(a) - myY + z = atomZ(a) - myZ + + x1 = x / z * 100 + 160 + y1 = y / z * 100 + 100 + + CIRCLE (oldAtomX(a), oldAtomY(a)), oldAtomSize(a), 0 + CIRCLE (x1, y1), atomSize(a) / z, 15 + oldAtomX(a) = x1 + oldAtomY(a) = y1 + oldAtomSize(a) = atomSize(a) / z + NEXT a END SUB -SUB gravi -FOR a = 1 TO mitu -x = atx(a) -y = aty(a) -z = atz(a) -pxs = 0 -pys = 0 -pzs = 0 - - -FOR b = 1 TO mitu -IF b = a THEN GOTO 2 -v = SQR((atx(b) - x) ^ 2 + (aty(b) - y) ^ 2 + (atz(b) - z) ^ 2) -v2 = 1 / (v - 1) - -pxs = pxs + (atx(b) - x) / v2 / 10000 -pys = pys + (aty(b) - y) / v2 / 10000 -pzs = pzs + (atz(b) - z) / v2 / 10000 - -2 -NEXT b - -atxs(a) = atxs(a) / 1.01 + pxs -atys(a) = atys(a) / 1.01 + pys -atzs(a) = atzs(a) / 1.01 + pzs -NEXT a - -FOR a = 1 TO mitu - -atx(a) = atx(a) + atxs(a) -aty(a) = aty(a) + atys(a) -atz(a) = atz(a) + atzs(a) -NEXT a - - - +SUB Gravitate + DIM pxs, pys, pzs + + FOR a = 1 TO countOfAtoms + x = atomX(a) + y = atomY(a) + z = atomZ(a) + pxs = 0 + pys = 0 + pzs = 0 + + FOR b = 1 TO countOfAtoms + IF b = a THEN GOTO 2 + v = SQR((atomX(b) - x) ^ 2 + (atomY(b) - y) ^ 2 + (atomZ(b) - z) ^ 2) + v2 = 1 / (v - 1) + + pxs = pxs + (atomX(b) - x) / v2 / 10000 + pys = pys + (atomY(b) - y) / v2 / 10000 + pzs = pzs + (atomZ(b) - z) / v2 / 10000 + +2 NEXT b + + atomXSpeed(a) = atomXSpeed(a) / 1.01 + pxs + atomYSpeed(a) = atomYSpeed(a) / 1.01 + pys + atomZSpeed(a) = atomZSpeed(a) / 1.01 + pzs + NEXT a + + FOR a = 1 TO countOfAtoms + atomX(a) = atomX(a) + atomXSpeed(a) + atomY(a) = atomY(a) + atomYSpeed(a) + atomZ(a) = atomZ(a) + atomZSpeed(a) + NEXT a END SUB