aboutsummaryrefslogtreecommitdiffstats
path: root/initrd/graph
blob: 949fd5243f1438b72be1fd2374f5c270b14509fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# graph area
plotx = 50
ploty = 50
plotw = 380
ploth = 220
cx = plotx + plotw / 2
cy = ploty + ploth / 2

# graph range
xmin = 0 - 10
xmax = 10
ymin = 0 - 10
ymax = 10

xinc = plotw / (xmax - xmin)
yinc = ploth / (ymax - ymin)

mlines = color(3, 3, 3)

func(makegrid) {
	rect(plotx, ploty, plotw, ploth, 0)

	x = plotx 
	while (x <= plotx + plotw) {
		line(x, ploty, x, ploty + ploth, mlines)
		x = x + xinc
	}

	y = ploty
	while (y <= ploty + ploth) {
		line(plotx, y, plotx + plotw, y, mlines)
		y = y + yinc
	}

	line(cx, ploty, cx, ploty + ploth, 32767)
	line(plotx, cy, plotx + plotw, cy, 32767)
}

#
# BIG LOOP - ask for equ, graph it
#

makegrid()
clearcmd = ""
while (1) {
	rect(0, 0, 480, 40, 0)
	print("f(x) = ")
	fx = gets()

	if (fx == clearcmd) {
		makegrid()
	} else {
		# do function
		X = xmin
		while (X < xmax) {
			y = solve(fx)
			y = 0 - y
			if ((y >= ymin) & (y <= ymax)) {
				pixel(cx + X * xinc, cy + y * yinc, 511)
			}
			X = X + 1 / xinc
		}
	}

	ppos(0, 0)
}