gscheme/examples/mandel.scm

38 lines
912 B
Scheme

;; mandelbrot set
(define mandel
(lambda (rmin rmax imin imax res)
(letrec
((rdelta (- rmax rmin)) (idelta (- imax imin))
(rdelta1 (/ rdelta res)) (idelta1 (/ idelta res))
(pcolor
(lambda (re im cre cim n)
(if (or (> n 200) (> (+ (* re re) (* im im)) 4.0))
(let
((c (* 8 (remainder n 8)))
(x (* res (/ (- cre rmin) rdelta)))
(y (* res (/ (- cim imin) idelta))))
(draw-color
(* 255 (remainder n 2))
(* 255 (remainder (quotient n 2) 2))
(* 255 (remainder (quotient n 4) 2)))
(draw-move x y)
(draw-line (+ x 1) (+ y 1)))
(pcolor
(+ (- (* re re) (* im im)) cre)
(+ (* 2 re im) cim)
cre cim (+ 1 n)))))
(iter
(lambda (rep imp)
(if (> rep rmax)
(if (> imp imax) '()
(iter rmin (+ imp idelta1)))
(begin
(pcolor 0 0 rep imp 0)
(iter (+ rep rdelta1) imp))))))
(iter rmin imin))))
(mandel -1.5 0.5 -1.0 1.0 25)