Vaatii Intermediate Student
-kielen.
Vaatii ehtolauseet
, listat_ja_rekursio
, paikalliset_maaritelmat
.
Ensin animoimaton versio
Sopivan step-sizen etsintä
(require 2htdp/universe)
(require 2htdp/image)
(define WIDTH 600)
(define HEIGHT 600)
(define MAX_X 5)
(define MAX_Y 1.4)
(define (draw world)
(local ((define (f x) (sin (+ x world))))
(plot f (- MAX_X) 0.2 (empty-scene WIDTH HEIGHT))))
(define (plot function start step scene)
(cond
[(> (+ step start) MAX_X) scene]
[else (plot function (+ start step) step
(add-line
scene
(scale-x start)
(scale-y (function start))
(scale-x (+ step start))
(scale-y (function (+ step start)))
"black"))]))
(define (scale-x value)
(+ (* (/ value 2 MAX_X) WIDTH)
(/ WIDTH 2)))
(define (scale-y value)
(+ (* -1 (/ value 2 MAX_Y) HEIGHT)
(/ HEIGHT 2)))
(define (step world)
(+ world 0.1))
(big-bang 0
[to-draw draw]
[on-tick step])
Tehtävä
Miten tekisit seuraavat funktiot? Huomaa, että joudut säätämään y:n maksimirajaa, jotta kuva piirtyy oikein.
Antaako valmiina vastauksena:
(λ (x) (* 2 (+ x world)))
(λ (x) (expt (+ x world) 2))
(λ (x) (sin (expt x 4)))
(λ (x) (sin (exp x)))
(λ (x) (tan x))
(λ (x) (sin (/ x)))
Pitäisikö varottaa, että tan räjähtää äärettömään ja viimeisestä tulee jako nollalla, vaiko jättää oppimiskokemukseksi?
(define (draw world)
(local ((define (f x) (sin (+ x world)))
(define (g x) (cos (+ x world))))
(plot g (- MAX_X) 0.1
(plot f (- MAX_X) 0.2 (empty-scene WIDTH HEIGHT)))))
(define MAX_Y 2.4)
(define (draw world)
(local ((define (f x) (sin (+ x world)))
(define (g x) (sin (* 2(+ x world))))
(define (h x) (+ (f x) (g x))))
(plot h (- MAX_X) 0.2 (empty-scene WIDTH HEIGHT))))
Tehtävä
Piirrä myös x- ja y-akselit ja niiden asteikot.
Asteikko? Jakomerkit? Mikä on oikea termi. Ticks englanniksi.