racket/collects/plot/tests/plot3d-tests.rkt

252 lines
9.1 KiB
Racket

#lang racket
(require plot plot/utils unstable/flonum)
;(plot-new-window? #t)
(time
(plot3d empty #:x-min -1 #:x-max 1 #:y-min -1 #:y-max 1 #:z-min -1 #:z-max 1))
(time
(plot3d (points3d empty) #:x-min -1 #:x-max 1 #:y-min -1 #:y-max 1 #:z-min -1 #:z-max 1))
(parameterize ([plot-background "black"]
[plot-foreground "white"]
[plot-background-alpha 1/2]
[plot-foreground-alpha 1/2])
(plot3d (surface3d (λ (x y) (* (sin x) (sin y))) -2 2 -2 2 #:label "z = trig(x,y)")))
(time
(plot3d (points3d '(#(0.1 0.6 0.3)))
#:x-min 0 #:x-max 1 #:y-min 0 #:y-max 1 #:z-min 0 #:z-max 1))
(time
(plot3d (vector-field3d (λ (x y z) (vector x z y)) -2 2 -2 2 -2 2
#:line-width 3)))
(time
(define x-ivls (bounds->intervals (linear-seq 2 8 10)))
(define y-ivls (bounds->intervals (linear-seq -5 5 10)))
(define x-mids (linear-seq 2 8 9 #:start? #f #:end? #f))
(define y-mids (linear-seq -5 5 9 #:start? #f #:end? #f))
(plot3d (rectangles3d (append*
(for/list ([y-ivl (in-list y-ivls)] [y (in-list y-mids)])
(for/list ([x-ivl (in-list x-ivls)] [x (in-list x-mids)])
(vector x-ivl y-ivl (ivl 0 (exp (* -1/2 (+ (sqr (- x 5)) (sqr y)))))))))
#:alpha 3/4
#:label "Approximate 2D Normal")))
(time
(plot3d (discrete-histogram3d (list (vector 'a 'a 1)
(vector 'a 'b 2)
(vector 'b 'b 3))
#:label "Missing (b,a)"
#:color 4 #:line-color 4)))
(time
(define c1s #(a b c d e))
(define c2s #(1 2 3 4 5))
(define cat-vals (build-list 15 (λ (n) (vector (vector-ref c1s (random 5))
(vector-ref c2s (random 5))
n))))
(plot3d (discrete-histogram3d cat-vals)))
(time
(plot3d (stacked-histogram3d '(#(a a (1 1 1)) #(a b (1.5 3)) #(b b ()) #(b a (1/2)))
#:labels '("Red" #f "Blue") #:alphas '(2/3))))
(time
(plot3d (stacked-histogram3d '(#(a a (1 1 1)) #(a b (1.5 3)) #(b b ()) #(b a (1/2)))
#:labels '("Red" #f "Blue") #:alphas '(2/3)
#:add-x-ticks? #f #:add-y-ticks? #f)))
(time
(plot3d (surface3d + 0 10 0 1)
#:angle 10 #:z-label "z axis"))
(parameterize ([plot-x-transform log-transform]
[plot-y-transform log-transform])
(time (plot3d (surface3d + .01 3 .01 1))))
;(plot-x-transform cbrt-transform)
;(plot-y-transform cbrt-transform)
;(plot-z-transform cbrt-transform)
(time
(plot3d (surface3d (λ (x y) (+ (/ 1.0 (exact->inexact x))
(/ 1.0 (exact->inexact y))))
-2 2 -2 2
#:color '(255 128 128)
#:line-color '(255 128 128)
#:line-width 1.5
#:label "Inverse")
#:title "Here it is!"
#:x-label "WannaHockaLoogi"
#:y-label "An Impossibly Long Y Axis Label"
#:angle 330 #:altitude 0))
(time
(plot3d (surface3d (λ (x y)
(+ (/ (+ (abs x) 0.01))
(/ (+ (abs y) 0.01))))
-4 4 -4 4 #:color '(128 128 255)
#:label "Z sort test polygons")
#:angle 330 #:altitude 41
#:z-label #f #:y-label #f #:x-label #f))
(let ()
(define xs (build-list 200 (λ (n) (/ 1 (- (random) 0.5)))))
(define ys (build-list 200 (λ (n) (/ 1 (- (random) 0.5)))))
(define zs (build-list 200 (λ (n) (/ 1 (- (random) 0.5)))))
(time
(plot3d (points3d (map vector xs ys zs)
#:x-min -20 #:x-max 20
#:y-min -20 #:y-max 20
#:z-min -20 #:z-max 20
#:label "Widget Locations")
#:angle 15 #:title "Random Points")))
(let ()
(define xs (build-list 10000 (λ (n) (/ 1 (- (random) 0.5)))))
(define ys (build-list 10000 (λ (n) (/ 1 (- (random) 0.5)))))
(define zs (build-list 10000 (λ (n) (/ 1 (- (random) 0.5)))))
(time
(plot3d (points3d (map vector xs ys zs)
#:x-min -20 #:x-max 20
#:y-min -20 #:y-max 20
#:z-min -20 #:z-max 20
#:color "blue" #:sym 'dot ;#:size 10
#:alpha 0.5)
#:angle 30 #:altitude 30
#:title "A Bunch of Random Points Concentrated at the Origin"
#:x-label "x" #:y-label "y" #:z-label "z")))
;; tests line clipping: should look like a sphere with six poles chopped off
(time
(plot3d (parametric3d (λ (t)
(vector (* (cos (* 80 t)) (cos t))
(* (sin (* 80 t)) (cos t))
(sin t)))
(- pi) pi
#:x-min -0.8 #:x-max 0.8
#:y-min -0.8 #:y-max 0.8
#:z-min -0.8 #:z-max 0.8
#:color "blue" #:width 1/2 #:style 'long-dash
#:samples 3000 #:alpha 0.5
#:label "Sphere")
#:altitude 22
#:x-min -1 #:x-max 1 #:y-min -1 #:y-max 1 #:z-min -1 #:z-max 1))
(time
(plot3d (surface3d (λ (x y) (+ x y)) -0.81 0.81 -0.81 0.81
#:line-color '(0 0 255) #:line-width 1 #:line-style 'dot)
#:x-min -1 #:x-max 1 #:y-min -1 #:y-max 1 #:z-min -1 #:z-max 1))
(time
(define xs (build-list 200 (λ (n) (* 2 (- (random) 0.5)))))
(define ys (build-list 200 (λ (n) (* 2 (- (random) 0.5)))))
(define zs (build-list 200 (λ (n) (* 2 (- (random) 0.5)))))
(plot3d (list (surface3d (λ (x y) (+ x y)) -0.81 0.81 -0.81 0.81
#:line-color '(0 0 255) #:line-width 1
#:line-style 'dot)
(points3d (map vector xs ys zs)))
#:x-min -1 #:x-max 1 #:y-min -1 #:y-max 1 #:z-min -1 #:z-max 1))
(define (norm mx my x y)
(exp (* -1/2 (+ (sqr (- x mx)) (sqr (- y my))))))
(define (f1 x y)
(- (sqr x) (sqr y)))
(define (f2 x y)
(- (sqrt (+ (abs y) (abs x)))))
(define (f3 x y)
(define d (* 2 pi (+ (abs x) (abs y))))
(+ (* 1/8 (cos d)) (- (sqr x) (sqr y))))
(define (f4 x y)
(imag-part (log (make-rectangular (exact->inexact x)
(exact->inexact y)))))
(define (f5 x y)
(+ (* 1.1 (norm -1.5 -1.5 x y))
(* 2 (norm 1 1 x y))
(* 1.3 (norm 2 -2 x y))))
(define (f6 x y)
(define d (sqrt (+ (sqr x) (sqr y))))
(if (d . < . 1)
(sqrt (- 1 (sqr d)))
0))
(parameterize ([plot3d-diffuse-light? #f]
[plot3d-specular-light? #f])
(time (plot3d (surface3d f5 -5 5 -5 5 #:style 'transparent))))
(time (plot3d (contours3d f5 -4 4 -4 4 #:colors '(0)
#:label "z")))
(time (plot3d (contour-intervals3d f5 -4 4 -4 4 #:label "z")))
(time (plot3d (contour-intervals3d
(λ (x y)
(define z (- x y))
(cond [(< z -1) -1]
[(> z 1) 1]
[else z]))
-2 2 -2 2)))
(time
(plot3d (contour-intervals3d (λ (x y) (+ x y)))
#:x-min #e100000000000000.0 #:x-max #e100000000000000.1
#:y-min #e100000000000000.0 #:y-max #e100000000000000.1
#:width 500))
(time
(plot3d (list (surface3d f5 0 4 -4 4 #:color '(128 255 160) #:alpha 0.5
#:label "x pos.")
(contour-intervals3d f5 -4 0 -4 4
#:colors '(0 1 5)
#:line-colors '(0 4 2)
#:line-widths '(1.5) #:line-styles '(dot)
#:contour-colors '(0)
#:contour-widths '(0)
#:contour-styles '(transparent)
#:alphas '(0.75)
#:label "x neg."))
#:z-min 0.25 #:z-max 1.1
#:legend-anchor 'top))
(time
(parameterize ([plot3d-samples 81])
(plot3d (contour-intervals3d
f5 -4 4 -4 4 #:label "z"
#:line-styles '(transparent)))))
(time
(plot3d (list (contours3d f5 -4 4 -4 4)
(contour-intervals3d f5 -2.5 2.5 -2.5 2.5
#:z-min 0.25 #:z-max 1.5 #:label "z"))))
(time
(plot3d (contour-intervals3d f5 -3 3 -3 3
#:colors '((255 128 128) (128 128 255)))))
(time
(plot3d (list (surface3d f4 -4 4 -4 4 #:color '(255 224 0))
(contours3d f4 -4 4 -4 4))
#:angle -30))
(time (plot3d (contour-intervals3d f1 -4 4 -4 4)))
(time (parameterize ([plot3d-samples 101])
(plot3d (contour-intervals3d f2 -2 2 -2 2 #:levels 10
#:line-styles '(transparent)
#:contour-styles '(long-dash)
#:alphas '(1 2/3))
#:altitude 20)))
(time
(plot3d (contour-intervals3d (λ (x y) (- (sqr x) (sqr y))) -min.0 +min.0 -min.0 +min.0)))