252 lines
9.1 KiB
Racket
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)))
|