10 REM GStirn3D v3.0 by Diego Rybski Feb 1996 20 SCREEN 8: CLS : WINDOW (0, 0)-(500, 400): KEY OFF 30 READ G, P, H 40 READ FX, FY, F, ST 50 FOR A = 1 TO P 60 READ X#(A), Y#(A), Z#(A), M#(A), XV#(A), YV#(A), ZV#(A) 70 NEXT A 80 FOR Z = 0 TO 400 STEP ST 90 FOR X = 500 TO 1 STEP -ST 100 SCREEN 8, 0, 3, 0: PSET (((F * X) + (FX * Z)) / (Z + F), ((F * Y) + (FY * Z)) / (Z + F)) 110 NEXT X 120 FOR Y = 400 TO 1 STEP -ST 130 SCREEN 8, 0, 3, 0: PSET (((F * X) + (FX * Z)) / (Z + F), ((F * Y) + (FY * Z)) / (Z + F)) 140 NEXT Y 150 NEXT Z 160 REM Beginn 170 FOR A = 1 TO P - 1 180 FOR B = A + 1 TO P 190 DX# = X#(B) - X#(A) 200 DY# = Y#(B) - Y#(A) 210 DZ# = Z#(B) - Z#(A) 220 D# = SQR((DX# * DX#) + (DY# * DY#) + (DZ# * DZ#)) 230 XV#(A) = XV#(A) + (H * G * M#(B) * DX# / (D# * D# * D#)): XV#(B) = XV#(B) - (H * G * M#(A) * DX# / (D# * D# * D#)) 240 YV#(A) = YV#(A) + (H * G * M#(B) * DY# / (D# * D# * D#)): YV#(B) = YV#(B) - (H * G * M#(A) * DY# / (D# * D# * D#)) 250 ZV#(A) = ZV#(A) + (H * G * M#(B) * DZ# / (D# * D# * D#)): ZV#(B) = ZV#(B) - (H * G * M#(A) * DZ# / (D# * D# * D#)) 260 NEXT B 270 NEXT A 280 FOR A = 1 TO P 290 X#(A) = X#(A) + H * XV#(A) 300 Y#(A) = Y#(A) + H * YV#(A) 310 Z#(A) = Z#(A) + H * ZV#(A) 320 SCREEN 8, 0, 0, S: PSET (X#(A), Y#(A)), A 330 SCREEN 8, 0, 1, S: PSET (Z#(A), Y#(A)), A 340 SCREEN 8, 0, 2, S: PSET (X#(A), Z#(A)), A 350 SCREEN 8, 0, 3, S: PSET (((F * X#(A)) + (FX * Z#(A))) / (Z#(A) + F), ((F * Y#(A)) + (FY * Z#(A))) / (Z#(A) + F)), A 360 NEXT A 370 A$ = INKEY$: IF A$ = "s" OR A$ = "S" THEN SCREEN 8, 0, 0, 0: END 380 IF A$ = "1" THEN S = 0 390 IF A$ = "2" THEN S = 1 400 IF A$ = "3" THEN S = 2 410 IF A$ = "4" THEN S = 3 420 GOTO 160 1000 DATA 6.673001E-11,4,0.5 1010 DATA 250,200,375,25 1020 DATA 250,200,200,1E+12,0,0,0 1030 DATA 450,200,200,1E+10,0,.5776244997978211,0 1040 DATA 435,200,200,10000,0,.6005853414535523,.2109186500310898 1050 DATA 100,100,300,1E+8,.5,0,.25