summaryrefslogtreecommitdiff
path: root/Examples/GIFPlot/Common-Lisp/full/runme.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/GIFPlot/Common-Lisp/full/runme.lisp')
-rw-r--r--Examples/GIFPlot/Common-Lisp/full/runme.lisp59
1 files changed, 59 insertions, 0 deletions
diff --git a/Examples/GIFPlot/Common-Lisp/full/runme.lisp b/Examples/GIFPlot/Common-Lisp/full/runme.lisp
new file mode 100644
index 0000000..48f8042
--- /dev/null
+++ b/Examples/GIFPlot/Common-Lisp/full/runme.lisp
@@ -0,0 +1,59 @@
+;;; Plot a 3D function
+
+;; Here is the function to plot
+(defun func (x y)
+ (* 5
+ (cos (* 2 (sqrt (+ (* x x) (* y y)))))
+ (exp (* -0.3 (sqrt (+ (* x x) (* y y)))))))
+
+;; Here are some plotting parameters
+(defvar xmin -5D0)
+(defvar xmax 5D0)
+(defvar ymin -5D0)
+(defvar ymax 5D0)
+(defvar zmin -5D0)
+(defvar zmax 5D0)
+
+;; Grid resolution
+(defvar nxpoints 60)
+(defvar nypoints 60)
+
+(defun drawsolid (p3)
+ (Plot3D-clear p3 0)
+ (Plot3D-start p3)
+ (let ((dx (/ (- xmax xmin) nxpoints))
+ (dy (/ (- ymax ymin) nypoints))
+ (cscale (/ 240 (- zmax zmin))))
+ (loop for x from xmin by dx
+ repeat nxpoints
+ do (loop for y from ymin by dy
+ repeat nypoints
+ do (let* ((z1 (func x y))
+ (z2 (func (+ x dx) y))
+ (z3 (func (+ x dx) (+ y dy)))
+ (z4 (func x (+ y dy)))
+ (c1 (* cscale (- z1 zmin)))
+ (c2 (* cscale (- z2 zmin)))
+ (c3 (* cscale (- z3 zmin)))
+ (c4 (* cscale (- z4 zmin)))
+ (cc (/ (+ c1 c2 c3 c4) 4))
+ (c (round (max (min cc 239) 0))))
+ (Plot3D-solidquad p3 x y z1 (+ x dx) y z2 (+ x dx) (+ y dy)
+ z3 x (+ y dy) z4 (+ c 16)))))))
+
+(defun action (cmap-filename)
+ (let ((cmap (new-ColorMap cmap-filename))
+ (frame (new-FrameBuffer 500 500)))
+ (format t "Making a nice 3D plot...~%")
+ (FrameBuffer-clear frame 0)
+ (let ((p3 (new-Plot3D frame xmin ymin zmin xmax ymax zmax)))
+ (Plot3D-lookat p3 (* 2 (- zmax zmin)))
+ (Plot3D-autoperspective p3 40D0)
+ (Plot3D-rotu p3 60D0)
+ (Plot3D-rotr p3 30D0)
+ (Plot3D-rotd p3 10D0)
+ (drawsolid p3))
+ (FrameBuffer-writeGIF frame cmap "/tmp/image.gif")
+ (format t "Wrote image.gif~%")))
+
+