3 ;; Here is the function to plot
6 (cos (* 2 (sqrt (+ (* x x) (* y y)))))
7 (exp (* -0.3 (sqrt (+ (* x x) (* y y)))))))
9 ;; Here are some plotting parameters
24 (let ((dx (/ (- xmax xmin) nxpoints))
25 (dy (/ (- ymax ymin) nypoints))
26 (cscale (/ 240 (- zmax zmin))))
27 (loop for x from xmin by dx
29 do (loop for y from ymin by dy
31 do (let* ((z1 (func x y))
32 (z2 (func (+ x dx) y))
33 (z3 (func (+ x dx) (+ y dy)))
34 (z4 (func x (+ y dy)))
35 (c1 (* cscale (- z1 zmin)))
36 (c2 (* cscale (- z2 zmin)))
37 (c3 (* cscale (- z3 zmin)))
38 (c4 (* cscale (- z4 zmin)))
39 (cc (/ (+ c1 c2 c3 c4) 4))
40 (c (round (max (min cc 239) 0))))
41 (Plot3D-solidquad p3 x y z1 (+ x dx) y z2 (+ x dx) (+ y dy)
42 z3 x (+ y dy) z4 (+ c 16)))))))
44 (defun action (cmap-filename)
45 (let ((cmap (new-ColorMap cmap-filename))
46 (frame (new-FrameBuffer 500 500)))
47 (format t "Making a nice 3D plot...~%")
48 (FrameBuffer-clear frame 0)
49 (let ((p3 (new-Plot3D frame xmin ymin zmin xmax ymax zmax)))
50 (Plot3D-lookat p3 (* 2 (- zmax zmin)))
51 (Plot3D-autoperspective p3 40D0)
56 (FrameBuffer-writeGIF frame cmap "/tmp/image.gif")
57 (format t "Wrote image.gif~%")))