Fixed broken links.
[qbasicapps.git] / graphics / 3D / mtrxmath.bas
1 ' 3D transformation using 3*3 matrix math.\r
2 ' by Svjatoslav Agejenko 2003.03\r
3 \r
4 ' use keys:\r
5 ' 7 9 - change alpha\r
6 ' 4 6 - change beta\r
7 ' 1 3 - change gamma\r
8 ' ESC - quit program\r
9 \r
10 DECLARE SUB gc (x!, y!, z!, x1!, y1!)\r
11 DECLARE SUB setan (a!, b!, c!)\r
12 DIM SHARED mx1, my1, mz1\r
13 DIM SHARED mx2, my2, mz2\r
14 DIM SHARED mx3, my3, mz3\r
15 \r
16 SCREEN 7, , , 1\r
17 \r
18 1\r
19 setan n1, n2, n3\r
20 \r
21 FOR y = -70 TO 70 STEP 5\r
22   FOR x = -70 TO 70 STEP 5\r
23     gc x, y, SIN((ABS(x) + ABS(y)) / 30) * 30, x1, y1\r
24     PSET (x1, y1), 15\r
25   NEXT x\r
26 NEXT y\r
27 PCOPY 0, 1\r
28 CLS\r
29 a$ = INPUT$(1)\r
30 IF a$ = "7" THEN n1 = n1 + .1\r
31 IF a$ = "9" THEN n1 = n1 - .1\r
32 IF a$ = "4" THEN n2 = n2 + .1\r
33 IF a$ = "6" THEN n2 = n2 - .1\r
34 IF a$ = "1" THEN n3 = n3 + .1\r
35 IF a$ = "3" THEN n3 = n3 - .1\r
36 IF a$ = CHR$(27) THEN SYSTEM\r
37 GOTO 1\r
38 \r
39 SUB gc (x, y, z, x1, y1)\r
40 \r
41 rx = x * mx1 + y * my1 + z * mz1        ' matrix transformation\r
42 ry = x * mx2 + y * my2 + z * mz2\r
43 rz = x * mx3 + y * my3 + z * mz3\r
44 \r
45 rz = rz + 100                           ' perspective calculation\r
46 x1 = rx / rz * 120 + 160\r
47 y1 = ry / rz * 120 + 100\r
48 \r
49 END SUB\r
50 \r
51 SUB setan (alp, bet, gam)\r
52 mx1 = SIN(gam) * SIN(bet) * SIN(alp) + COS(gam) * COS(alp)\r
53 my1 = COS(bet) * SIN(alp)\r
54 mz1 = SIN(gam) * COS(alp) - COS(gam) * SIN(bet) * SIN(alp)\r
55 \r
56 mx2 = SIN(gam) * SIN(bet) * COS(alp) - COS(gam) * SIN(alp)\r
57 my2 = COS(bet) * COS(alp)\r
58 mz2 = -COS(gam) * SIN(bet) * COS(alp) - SIN(gam) * SIN(alp)\r
59 \r
60 mx3 = -SIN(gam) * COS(bet)\r
61 my3 = SIN(bet)\r
62 mz3 = COS(gam) * COS(bet)\r
63 END SUB\r
64 \r