1 ' 3D formula explorer
\r
2 ' made by Svjatoslav Agejenko
\r
4 ' H-Page: svjatoslav.eu
\r
5 ' E-Mail: svjatoslavagejenko@gmail.com
\r
8 ' cursor keys - move around
\r
11 ' ESC - exit program
\r
13 ' Type your formula to sub module "valem".
\r
14 ' X & Y are surface coordinates. Z must be formula
\r
15 ' result, indicating height. "tm" variable counts
\r
16 ' frames. Use it in your formula to make graph moving in time.
\r
19 DECLARE SUB valem (x!, y!, z!)
\r
20 DECLARE SUB graaf ()
\r
21 DECLARE SUB mkgr3 (x1!, y1!, z1!)
\r
22 DECLARE SUB mkgr2 (x1!, y1!, z1!)
\r
23 DECLARE SUB mkgr (x1!, y1!, z1!)
\r
24 DECLARE SUB ruut2 (x!, y!, z!, s!)
\r
25 DECLARE SUB ruut (x!, y!, z!, s!)
\r
26 DECLARE SUB kuus (x, y, z, s)
\r
27 DECLARE SUB porand ()
\r
28 DECLARE SUB addp (x, y, z)
\r
29 DECLARE SUB start ()
\r
30 DECLARE SUB addsq (x1%, y1%, z1%)
\r
31 DECLARE SUB getcor ()
\r
32 DECLARE SUB mulcor ()
\r
33 DECLARE SUB nait3d ()
\r
34 DECLARE SUB calcsin ()
\r
35 DIM SHARED xn(4000), yn(4000), zn(4000)
\r
36 DIM SHARED x(4000), y(4000), z(4000)
\r
38 DIM SHARED xo(4000), yo(4000), zo(4000)
\r
39 DIM SHARED point1(4000), point2(4000)
\r
40 DIM SHARED col(4000)
\r
41 DIM SHARED nump, numl
\r
42 DIM SHARED tmnump, tmnuml, tm
\r
43 DIM SHARED myx, myy, myz, mye, myk
\r
56 PRINT "Kuskil programmis l�ks mingi arv �le lubatud piiride!!!"
\r
90 point1(numl + 1) = nump + 1
\r
91 point2(numl + 1) = nump + 2
\r
94 point1(numl + 2) = nump + 3
\r
95 point2(numl + 2) = nump + 4
\r
98 point1(numl + 3) = nump + 5
\r
99 point2(numl + 3) = nump + 6
\r
114 FOR x = -500 TO 500 STEP 50
\r
115 FOR z = -500 TO 500 STEP 50
\r
119 valem x / 50, z / 50, y
\r
120 yn(nump + d) = y * 50
\r
124 point1(numl + e) = nump + d
\r
125 point2(numl + e) = nump + d - 1
\r
131 point1(numl + e) = nump + d
\r
132 point2(numl + e) = nump + d - 21
\r
143 SUB mkgr (x1, y1, z1)
\r
148 FOR z = -500 TO 500 STEP 100
\r
149 FOR y = -500 TO 500 STEP 100
\r
153 yn(nump + d) = y1 + y
\r
154 zn(nump + d) = z1 + z
\r
157 point1(numl + e) = nump + d
\r
158 point2(numl + e) = nump + d - 1
\r
164 point1(numl + e) = nump + d
\r
165 point2(numl + e) = nump + d - 11
\r
176 SUB mkgr2 (x1, y1, z1)
\r
182 FOR x = -500 TO 500 STEP 100
\r
183 FOR y = -500 TO 500 STEP 100
\r
186 xn(nump + d) = x1 + x
\r
187 yn(nump + d) = y1 + y
\r
191 point1(numl + e) = nump + d
\r
192 point2(numl + e) = nump + d - 1
\r
198 point1(numl + e) = nump + d
\r
199 point2(numl + e) = nump + d - 11
\r
211 SUB mkgr3 (x1, y1, z1)
\r
217 FOR x = -500 TO 500 STEP 100
\r
218 FOR z = -500 TO 500 STEP 100
\r
221 xn(nump + d) = x1 + x
\r
222 yn(nump + d) = y1 + y
\r
226 point1(numl + e) = nump + d
\r
227 point2(numl + e) = nump + d - 1
\r
233 point1(numl + e) = nump + d
\r
234 point2(numl + e) = nump + d - 11
\r
256 myx = myx + SIN(deg1) * mye
\r
257 myz = myz + COS(deg1) * mye
\r
259 myx = myx + COS(deg1) * myk
\r
260 myz = myz - SIN(deg1) * myk
\r
267 C1 = COS(deg1): S1 = SIN(deg1)
\r
268 C2 = COS(Deg2): S2 = SIN(Deg2)
\r
276 x1 = (xo * C1 - zo * S1)
\r
277 z1 = (xo * S1 + zo * C1)
\r
279 y1 = (yo * C2 - z1 * S2)
\r
280 z2 = (yo * S2 + z1 * C2)
\r
288 x(a) = 320 + (x1 / z2 * 500)
\r
289 y(a) = 240 + (y1 / z2 * 500)
\r
297 IF xo(p1) = -1 OR xo(p2) = -1 THEN ELSE LINE (xo(p1), yo(p1))-(xo(p2), yo(p2)), 0
\r
299 IF x(p1) = -1 OR x(p2) = -1 THEN ELSE LINE (x(p1), y(p1))-(x(p2), y(p2)), col(a)
\r
374 SUB valem (x, y, z)
\r
376 v = SQR(x * x + y * y) ' v = distance from center, some formulas needs it.
\r
378 z = z + SIN(x + y) * SIN(tm / 10) ' diagonal lines
\r
379 z = z + (SQR((15 + v) * (15 - v)) - 10) ' top of the ball
\r
380 ' here I mixed 2 formulas.
\r
382 'z = z + RND * 1 ' noise
\r
383 'z = z + SIN((y + tm) / 2) ' forward moving wave
\r
384 'z = z + SIN(v / 2) * 2 ' circular waves
\r
385 'z = z - SQR(v * 6) ' sharp
\r
387 'z = z + SIN(y / 1.5) / 1.5 + COS(x / 1.5) / 1.5' custom 1
\r
388 'z = z + SIN(y / 1.5) * COS(x / 1.5) / 1.5 ' custom 2
\r
389 'z = z + INT(SIN(1.5 * x * SIN(tm / 10))) * 3 ' custom 3
\r
390 'z = z - INT(v / 5) * 3 + 3 ' custom 4
\r
391 '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