open Impact
//let redLine(x, y, m, xlen) =
//    while (x < x+xlen) do
//        dot(x,y) red
//        x <- x + 0.5
//        y <- y + m*0.5
 
let vline(x,height) =
    let mutable numDots = 0.0
    let mutable y = 0.0
    if d > 0.0 then
        while y < d do
            dot (x,y) black
            y <- y + 1.
            numDots <- numDots + 1.0
    else
        while y > d do
            dot (x,y) red
            y <- y - 1.; numDots <- numDots - 1.
    numDots
 
let rect(xstart,ystart,width, height) =
    let mutable x = xstart
    let mutable sum = 0.0
    while x < xstart + width do
        sum <- sum + vline(x,height)
        x <- x + 1.0
    sum
 
clear()
 
e <- 2.71828
let f0(x) = sin(x/20.0) * 50.0
let f1(x) = cos(x/20.0) * 50.0
let f2(x) = 100.0/((2.0**(-(x-40.0)/4.0)) + 1.0) - 45.0
let f3(x) = (-25.0) + (0.2 *x) + 100.*(2.**(-(((x-100.)/50.)**2.)) - (2.*(2.**(-(((x-100.)/25.)**2.)))))
let f4(x) = x*x/100.0
let f5(x) = 100.0/(1.+e**(-(x-100.0)/2.))
let f6(x) = -50. + 100.0/(1.+e**(-(x-100.0)/2.))
let f7(x) = 2.0*x-80.0
let f8(x) = x
let f9(x) = 0.05*(x ** 2.0)
let f = f0
 
let deltaX = 1.0
let diff(x) = (f(x+deltaX) - f(x))/deltaX
 
clear()
x <- 0.0
s <- 0.0
while x < 200. do
    dot (x,f(x)) green
    dot (x, s) red
    d <- diff(x) 
    dot (x, d) blue
    s <- s + d*deltaX //s <- s + rect(x,0.0,deltaX,d) 
    x <- x+deltaX