' Svjatoslav Agejenko ' Use keys: ' Up, Down, Left, Right, w, z - rotate ' - speed down ' q - quit DECLARE SUB getcor () DECLARE SUB mulcor () DECLARE SUB nait3d () DECLARE SUB calcsin () DEFINT A-Z DIM SHARED Xn(100), Yn(100), Zn(100) DIM SHARED Xs1(100), Ys1(100), Xe1(100), Ye1(100) DIM SHARED x(100), y(100), z(100), pointers1(100), pointers2(100) DIM SHARED Cosine&(360), Sine&(360) DIM SHARED np, nl DIM SHARED jrp, jrl jrp = 0 jrl = 0 SCREEN 12 CLS calcsin getcor mulcor nait3d DATA 5, -60, -10 DATA 15,-50, -10 DATA 15, 0, -10 DATA 5, 10, -10 DATA -5, 10, -10 DATA -15, 0, -10 DATA -15,-50, -10 DATA -5, -60, -10 DATA 5, -60, 10 DATA 15,-50, 10 DATA 15, 0, 10 DATA 5, 10, 10 DATA -5, 10, 10 DATA -15, 0, 10 DATA -15,-50, 10 DATA -5, -60, 10 DATA 5, 20, 10 DATA 15, 30, 10 DATA 15, 40, 10 DATA 5, 50, 10 DATA -5, 50, 10 DATA -15, 40, 10 DATA -15, 30, 10 DATA -5, 20, 10 DATA 5, 20, -10 DATA 15, 30, -10 DATA 15, 40, -10 DATA 5, 50, -10 DATA -5, 50, -10 DATA -15, 40, -10 DATA -15, 30, -10 DATA -5, 20, -10 DATA 999,999,999 DATA 0,1 DATA 1,2 DATA 2,3 DATA 3,4 DATA 4,5 DATA 5,6 DATA 6,7 DATA 7,0 DATA 8,9 DATA 9,10 DATA 10,11 DATA 11,12 DATA 12,13 DATA 13,14 DATA 14,15 DATA 15,8 DATA 0,8 DATA 1,9 DATA 2,10 DATA 3,11 DATA 4,12 DATA 5,13 DATA 6,14 DATA 7,15 DATA 16,17 DATA 17,18 DATA 18,19 DATA 19,20 DATA 20,21 DATA 21,22 DATA 22,23 DATA 23,16 DATA 24,25 DATA 25,26 DATA 26,27 DATA 27,28 DATA 28,29 DATA 29,30 DATA 30,31 DATA 31,24 DATA 24,16 DATA 25,17 DATA 26,18 DATA 27,19 DATA 28,20 DATA 29,21 DATA 30,22 DATA 31,23 DATA 999, 999 SUB calcsin FOR a! = 0 TO 359 / 57.29577951# STEP 1 / 57.29577951# Cosine&(a) = INT(.5 + COS(a!) * 1024) Sine&(a) = INT(.5 + SIN(a!) * 1024) a = a + 1 NEXT END SUB SUB getcor FOR a = 0 TO 10000 READ x(a), y(a), z(a) IF x(a) = 999 THEN x(a) = 0: y(a) = 0: z(a) = 0: GOTO 1 NEXT 1 np = a FOR a = 0 TO 10000 READ pointers1(a), pointers2(a) IF pointers1(a) = 999 THEN GOTO 2 NEXT 2 nl = a END SUB SUB mulcor suur = 0 FOR a = 0 TO np IF ABS(x(a)) > suur THEN suur = ABS(x(a)) IF ABS(y(a)) > suur THEN suur = ABS(y(a)) IF ABS(z(a)) > suur THEN suur = ABS(z(a)) NEXT a ksuur = 100 / suur FOR a = 0 TO np x(a) = x(a) * ksuur y(a) = y(a) * ksuur z(a) = z(a) * ksuur NEXT a END SUB SUB nait3d DO Deg1 = Deg1 + d1 Deg2 = Deg2 + d2 Deg3 = Deg3 + d3 IF Deg1 <= 0 THEN Deg1 = Deg1 + 360 IF Deg2 <= 0 THEN Deg2 = Deg2 + 360 IF Deg3 <= 0 THEN Deg3 = Deg3 + 360 IF Deg1 >= 360 THEN Deg1 = Deg1 - 360 IF Deg2 >= 360 THEN Deg2 = Deg2 - 360 IF Deg3 >= 360 THEN Deg3 = Deg3 - 360 C1& = Cosine&(Deg1): S1& = Sine&(Deg1) C2& = Cosine&(Deg2): S2& = Sine&(Deg2) C3& = Cosine&(Deg3): S3& = Sine&(Deg3) FOR a = 0 TO np - 1 R = a Xo = x(R): Yo = y(R): Zo = z(R) X1 = (Xo * C1& - Yo * S1&) \ 1024 Y1 = (Xo * S1& + Yo * C1&) \ 1024 X2& = (X1 * C2& - Zo * S2&) \ 1024 z1 = (X1 * S2& + Zo * C2&) \ 1024 Y2& = (Y1 * C3& - z1 * S3&) \ 1024 z2 = (Y1 * S3& + z1 * C3&) \ 1024 z2 = z2 + 300 Xn(R) = 320 + (X2& / z2 * 500) Yn(R) = 240 + (Y2& / z2 * 500) NEXT FOR a1 = 0 TO nl - 1 F1 = pointers1(a1) S1 = pointers2(a1) Xn = Xn(F1) Yn = Yn(F1) X1 = Xn(S1) Y1 = Yn(S1) LINE (Xs1(a1), Ys1(a1))-(Xe1(a1), Ye1(a1)), 0 LINE (X1, Y1)-(Xn, Yn), 15 Xs1(a1) = X1: Ys1(a1) = Y1 Xe1(a1) = Xn: Ye1(a1) = Yn NEXT K$ = INKEY$ IF K$ <> "" THEN SELECT CASE K$ CASE CHR$(0) + CHR$(72) d1 = d1 + 1 CASE CHR$(0) + CHR$(80) d1 = d1 - 1 CASE CHR$(0) + CHR$(75) d2 = d2 - 1 CASE CHR$(0) + CHR$(77) d2 = d2 + 1 CASE "w" d3 = d3 - 1 CASE "z" d3 = d3 + 1 CASE " " d1 = d1 / 2 d2 = d2 / 2 d3 = d3 / 2 CASE CHR$(27) SYSTEM END SELECT END IF LOOP END SUB