Skip to content

Commit 1fd8bee

Browse files
committed
xmax tree sample
1 parent d135307 commit 1fd8bee

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

graphics 4/xmax_tree.bas

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
rem Welcome to SmallBASIC
2+
rem see https://github.com/anvaka/atree
3+
nmax = 19
4+
xScale = 6
5+
zScale = 2.5
6+
yScale = 16
7+
startFrom = 0
8+
dz = 400
9+
10+
redSpiralShadow = createSpiral(rgb(0x66,0,0), rgb(0x33,0,0), true, 1.01)
11+
redSpiral = createSpiral(rgb(0xff,0,0), rgb(0x44,0,0), true, 1)
12+
cyanSpiralShadow = createSpiral(rgb(0,0x33,0), 0, false, 1.01)
13+
cyanSpiral = createSpiral(rgb(0,0xff,0xcc), rgb(0, 0x56, 0x33), false, 1)
14+
15+
while 1
16+
cls
17+
renderFrame()
18+
if (startFrom > 1) then
19+
startFrom = 0
20+
else
21+
startFrom += 0.1
22+
endif
23+
showpage
24+
delay 30
25+
wend
26+
27+
sub renderFrame()
28+
xScale *= 0.93
29+
forEachStep(redSpiralShadow)
30+
forEachStep(cyanSpiralShadow)
31+
xScale /= 0.93
32+
forEachStep(redSpiral)
33+
forEachStep(cyanSpiral)
34+
end
35+
36+
sub forEachStep(spiral)
37+
local i = -startFrom
38+
while i < nmax + startFrom
39+
if (i >= 0 && i <= nmax) then
40+
spiral.show(i)
41+
endif
42+
i += 0.08
43+
wend
44+
end
45+
46+
func createSpiral(foreground, background, isLeft, yLocalScale)
47+
local spiral
48+
spiral.sign = iff(isLeft, -1, 1)
49+
spiral.yLocalScale = iff(LocalScale > 0, yLocalScale, 1)
50+
51+
if isLeft == 0 then
52+
spiral.background = foreground
53+
spiral.foreground = background
54+
else
55+
spiral.background = background
56+
spiral.foreground = foreground
57+
endif
58+
59+
func getX(i, z, sign)
60+
return sign * i * cos(i) * z * xScale + 255
61+
end
62+
63+
func getY(i, z)
64+
return i * z * yScale + 50
65+
end
66+
67+
sub show(i)
68+
local zoff = i * sin(i)
69+
local z = dz / (dz - self.sign * zoff * zScale)
70+
local x = getX(i, z, self.sign)
71+
local y = getY(i * self.yLocalScale, z)
72+
local c = iff(zoff + self.sign * PI / 4 < 0, self.foreground, self.background)
73+
line x, y, getX(i + 0.03, z, self.sign), getY((i + 0.01) * self.yLocalScale, z), c
74+
end
75+
76+
spiral.show = @show
77+
return spiral
78+
end
79+

0 commit comments

Comments
 (0)