' 3D test ' made by Svjatoslav Agejenko ' in 2003.12 ' H-Page: svjatoslav.eu ' E-Mail: svjatoslav@svjatoslav.eu DECLARE SUB star (x!, y!, z!, an1!, an2!, an3!) DECLARE SUB gp (x!, y!, z!, x1!, y1!) DECLARE SUB stic (x!, y!, z!, an1!, an2!, an3!) DECLARE SUB gc (x!, y!, z!, x1!, y1!, z1!) DECLARE SUB gcp (x!, y!, z!, x1!, y1!) DECLARE SUB setan (alp!, bet!, gam!) DECLARE SUB start () DECLARE SUB drawscr () DIM SHARED mx1, my1, mz1 DIM SHARED mx2, my2, mz2 DIM SHARED mx3, my3, mz3 DIM SHARED frm, pi start 1 drawscr frm = frm + 1 GOTO 1 SUB drawscr an1 = SIN(frm / 50) / 2 an2 = SIN(frm / 23) / 2 - .5 an3 = 0 setan an1, an2, an3 FOR x = -100 TO 100 STEP 10 FOR z = 0 TO 200 STEP 10 gcp x, -90, z, x1, y1 PSET (x1, y1), 15 NEXT z NEXT x gc -70, -90, 150, x1, y1, z1 stic x1, y1, z1, an1, an2, an3 PCOPY 0, 1 CLS END SUB SUB gc (x, y, z, x1, y1, z1) x1 = x * mx1 + y * my1 + z * mz1 y1 = x * mx2 + y * my2 + z * mz2 z1 = x * mx3 + y * my3 + z * mz3 END SUB SUB gcp (x, y, z, x1, y1) rx = x * mx1 + y * my1 + z * mz1 ' matrix transformation ry = x * mx2 + y * my2 + z * mz2 rz = x * mx3 + y * my3 + z * mz3 rz = rz + 100 ' perspective calculation x1 = rx / rz * 120 y1 = ry / rz * 120 END SUB SUB gp (x, y, z, x1, y1) rz = z + 100 ' perspective calculation x1 = x / rz * 120 y1 = y / rz * 120 END SUB SUB setan (alp, bet, gam) mx1 = SIN(gam) * SIN(bet) * SIN(alp) + COS(gam) * COS(alp) my1 = COS(bet) * SIN(alp) mz1 = SIN(gam) * COS(alp) - COS(gam) * SIN(bet) * SIN(alp) mx2 = SIN(gam) * SIN(bet) * COS(alp) - COS(gam) * SIN(alp) my2 = COS(bet) * COS(alp) mz2 = -COS(gam) * SIN(bet) * COS(alp) - SIN(gam) * SIN(alp) mx3 = -SIN(gam) * COS(bet) my3 = SIN(bet) mz3 = COS(gam) * COS(bet) END SUB SUB star (x, y, z, an1, an2, an3) nan1 = an1 nan2 = an2 nan3 = an3 setan nan1, nan2, nan3 gp x, y, z, rx1, ry1 FOR n = 0 TO pi * 2 - .1 STEP pi / 5 x1 = SIN(n) * 20 y1 = COS(n) * 20 gc x1, y1, 0, x2, y2, z2 gp x2 + x, y2 + y, z2 + z, rx2, ry2 CIRCLE (rx2, ry2), 1, 14 LINE (rx2, ry2)-(rx1, ry1), 1 NEXT n END SUB SUB start SCREEN 7, , , 1 WINDOW (-160, -100)-(160, 100) pi = 3.141592 END SUB SUB stic (x, y, z, an1, an2, an3) nan1 = an1 nan2 = an2 nan3 = an3 + frm / 50 setan nan1, nan2, nan3 gp x, y, z, rx1, ry1 DIM tmpx(0 TO 5) DIM tmpy(0 TO 5) DIM tmpz(0 TO 5) DIM tmprx(0 TO 5) DIM tmpry(0 TO 5) p = 0 FOR n = 0 TO pi * 2 - .5 STEP pi / 3 x1 = SIN(n) * 100 z1 = COS(n) * 100 gc x1, 100, z1, x2, y2, z2 tmpx(p) = x2 + x tmpy(p) = y2 + y tmpz(p) = z2 + z gp x2 + x, y2 + y, z2 + z, rx2, ry2 tmprx(p) = rx2 tmpry(p) = ry2 LINE (rx1, ry1)-(rx2, ry2), 15 p = p + 1 NEXT n LINE (tmprx(0), tmpry(0))-(tmprx(2), tmpry(2)), 10 LINE (tmprx(2), tmpry(2))-(tmprx(4), tmpry(4)), 10 LINE (tmprx(4), tmpry(4))-(tmprx(0), tmpry(0)), 10 LINE (tmprx(1), tmpry(1))-(tmprx(3), tmpry(3)), 12 LINE (tmprx(3), tmpry(3))-(tmprx(5), tmpry(5)), 12 LINE (tmprx(5), tmpry(5))-(tmprx(1), tmpry(1)), 12 star tmpx(0), tmpy(0), tmpz(0), nan1, nan2, nan3 END SUB