1 CHDIR ".\qbasicapps\math\3D graph\"
\r
4 ' 3D formula explorer
\r
5 ' made by Svjatoslav Agejenko
\r
7 ' homepage: svjatoslav.eu
\r
8 ' email: svjatoslav@svjatoslav.eu
\r
11 ' cursor keys - move around
\r
14 ' ESC - exit program
\r
16 ' Type your formula to sub module "valem".
\r
17 ' X & Y are surface coordinates. Z must be formula
\r
18 ' result, indicating height. "tm" variable counts
\r
19 ' frames. Use it in your formula to make graph moving in time.
\r
22 DECLARE SUB valem (x!, y!, z!)
\r
23 DECLARE SUB graaf ()
\r
24 DECLARE SUB mkgr3 (x1!, y1!, z1!)
\r
25 DECLARE SUB mkgr2 (x1!, y1!, z1!)
\r
26 DECLARE SUB mkgr (x1!, y1!, z1!)
\r
27 DECLARE SUB ruut2 (x!, y!, z!, s!)
\r
28 DECLARE SUB ruut (x!, y!, z!, s!)
\r
29 DECLARE SUB kuus (x, y, z, s)
\r
30 DECLARE SUB porand ()
\r
31 DECLARE SUB addp (x, y, z)
\r
32 DECLARE SUB start ()
\r
33 DECLARE SUB addsq (x1%, y1%, z1%)
\r
34 DECLARE SUB getcor ()
\r
35 DECLARE SUB mulcor ()
\r
36 DECLARE SUB nait3d ()
\r
37 DECLARE SUB calcsin ()
\r
38 DIM SHARED xn(4000), yn(4000), zn(4000)
\r
39 DIM SHARED x(4000), y(4000), z(4000)
\r
41 DIM SHARED xo(4000), yo(4000), zo(4000)
\r
42 DIM SHARED point1(4000), point2(4000)
\r
43 DIM SHARED col(4000)
\r
44 DIM SHARED nump, numl
\r
45 DIM SHARED tmnump, tmnuml, tm
\r
46 DIM SHARED myx, myy, myz, mye, myk
\r
59 PRINT "Kuskil programmis l�ks mingi arv �le lubatud piiride!!!"
\r
93 point1(numl + 1) = nump + 1
\r
94 point2(numl + 1) = nump + 2
\r
97 point1(numl + 2) = nump + 3
\r
98 point2(numl + 2) = nump + 4
\r
101 point1(numl + 3) = nump + 5
\r
102 point2(numl + 3) = nump + 6
\r
117 FOR x = -500 TO 500 STEP 50
\r
118 FOR z = -500 TO 500 STEP 50
\r
122 valem x / 50, z / 50, y
\r
123 yn(nump + d) = y * 50
\r
127 point1(numl + e) = nump + d
\r
128 point2(numl + e) = nump + d - 1
\r
134 point1(numl + e) = nump + d
\r
135 point2(numl + e) = nump + d - 21
\r
146 SUB mkgr (x1, y1, z1)
\r
151 FOR z = -500 TO 500 STEP 100
\r
152 FOR y = -500 TO 500 STEP 100
\r
156 yn(nump + d) = y1 + y
\r
157 zn(nump + d) = z1 + z
\r
160 point1(numl + e) = nump + d
\r
161 point2(numl + e) = nump + d - 1
\r
167 point1(numl + e) = nump + d
\r
168 point2(numl + e) = nump + d - 11
\r
179 SUB mkgr2 (x1, y1, z1)
\r
185 FOR x = -500 TO 500 STEP 100
\r
186 FOR y = -500 TO 500 STEP 100
\r
189 xn(nump + d) = x1 + x
\r
190 yn(nump + d) = y1 + y
\r
194 point1(numl + e) = nump + d
\r
195 point2(numl + e) = nump + d - 1
\r
201 point1(numl + e) = nump + d
\r
202 point2(numl + e) = nump + d - 11
\r
214 SUB mkgr3 (x1, y1, z1)
\r
220 FOR x = -500 TO 500 STEP 100
\r
221 FOR z = -500 TO 500 STEP 100
\r
224 xn(nump + d) = x1 + x
\r
225 yn(nump + d) = y1 + y
\r
229 point1(numl + e) = nump + d
\r
230 point2(numl + e) = nump + d - 1
\r
236 point1(numl + e) = nump + d
\r
237 point2(numl + e) = nump + d - 11
\r
259 myx = myx + SIN(deg1) * mye
\r
260 myz = myz + COS(deg1) * mye
\r
262 myx = myx + COS(deg1) * myk
\r
263 myz = myz - SIN(deg1) * myk
\r
270 C1 = COS(deg1): S1 = SIN(deg1)
\r
271 C2 = COS(Deg2): S2 = SIN(Deg2)
\r
279 x1 = (xo * C1 - zo * S1)
\r
280 z1 = (xo * S1 + zo * C1)
\r
282 y1 = (yo * C2 - z1 * S2)
\r
283 z2 = (yo * S2 + z1 * C2)
\r
291 x(a) = 320 + (x1 / z2 * 500)
\r
292 y(a) = 240 + (y1 / z2 * 500)
\r
300 IF xo(p1) = -1 OR xo(p2) = -1 THEN ELSE LINE (xo(p1), yo(p1))-(xo(p2), yo(p2)), 0
\r
302 IF x(p1) = -1 OR x(p2) = -1 THEN ELSE LINE (x(p1), y(p1))-(x(p2), y(p2)), col(a)
\r
379 SUB valem (x, y, z)
\r
381 v = SQR(x * x + y * y) ' v = distance from center, some formulas needs it.
\r
383 z = z + SIN(x + y) * SIN(tm / 10) ' diagonal lines
\r
384 z = z + (SQR((15 + v) * (15 - v)) - 10) ' top of the ball
\r
385 ' here I mixed 2 formulas.
\r
387 'z = z + RND * 1 ' noise
\r
388 'z = z + SIN((y + tm) / 2) ' forward moving wave
\r
389 'z = z + SIN(v / 2) * 2 ' circular waves
\r
390 'z = z - SQR(v * 6) ' sharp
\r
392 'z = z + SIN(y / 1.5) / 1.5 + COS(x / 1.5) / 1.5' custom 1
\r
393 'z = z + SIN(y / 1.5) * COS(x / 1.5) / 1.5 ' custom 2
\r
394 'z = z + INT(SIN(1.5 * x * SIN(tm / 10))) * 3 ' custom 3
\r
395 'z = z - INT(v / 5) * 3 + 3 ' custom 4
\r
396 'z = z + 3 * ((-INT((x - .3) / 20) * INT((23 + x - ABS(y * 1.2)) / 15)) + -INT(-y / 20) * -INT(-x / 20) * INT(-((x - 2) * (x - 2) + (y * 1.2 - 4) * (y * 1.2 - 4)) / 2000 + 1.01) + -INT(y / 20) * -INT(-x / 20) * INT(-((x - 2) * (x - 2) + (y * 1.2 + 4) * (y * 1.2 + 4)) / 2000 + 1.01)) ' heart
\r