59 lines
2.3 KiB
Scheme
59 lines
2.3 KiB
Scheme
(module renderer-helpers mzscheme
|
|
|
|
; Contains the helpers for the plot-renderers package
|
|
; usefull for building your own renderers
|
|
|
|
(require mzlib/list mzlib/math plot/math)
|
|
|
|
; sample-size: number number number -> number
|
|
(define (sample-size samples x-min x-max)
|
|
(/ (- x-max x-min) (- samples 1)))
|
|
|
|
; scale-vectors : listof-posn number number -> listof-posn
|
|
; scales vectors, causing them to fit in their boxes
|
|
(define (scale-vectors deltas x-sample-size y-sample-size)
|
|
(let* ((x-max-value (apply max (map vector-x deltas)))
|
|
(y-max-value (apply max (map vector-y deltas)))
|
|
(x-div-const (/ x-max-value x-sample-size))
|
|
(y-div-const (/ y-max-value y-sample-size)))
|
|
(map (lambda (point) (vector (* (/ (vector-x point) x-div-const) 9/10)
|
|
(* (/ (vector-y point) y-div-const) 9/10))) deltas)))
|
|
|
|
; x-values : number number number -> listof-number
|
|
(define (x-values samples x-min x-max)
|
|
(let ((ss (sample-size samples x-min x-max)))
|
|
(build-list samples (lambda (x) (+ x-min (* x ss))))))
|
|
|
|
; normalze-vector : posn number number -> posn
|
|
(define (normalize-vector vec x-sample-size y-sample-size)
|
|
(let* ((size (vector-magnitude vec)))
|
|
(if (zero? size)
|
|
(vector 0 0)
|
|
(vector (* (/ (vector-x vec) size) x-sample-size 9/10)
|
|
(* (/ (vector-y vec) size) y-sample-size 9/10)))))
|
|
|
|
; normalize-vector : listof-posn number number -> listolf-posn
|
|
(define (normalize-vectors deltas x-sample-size y-sample-size)
|
|
(map (lambda (vec) (normalize-vector vec x-sample-size y-sample-size)) deltas))
|
|
|
|
; make-column : number listof-number -> listof-points
|
|
(define (make-column x-val y-values)
|
|
(map (lambda (y) (vector x-val y)) y-values))
|
|
|
|
; xy-list : number number number number number -> listof-posn
|
|
; make a list of all the positions on the graph
|
|
(define (xy-list samples x-min x-max y-min y-max)
|
|
(let* ((x-vals (x-values samples x-min x-max))
|
|
(y-vals (x-values samples y-min y-max)))
|
|
(apply append (map (lambda (x) (make-column x y-vals)) x-vals))))
|
|
|
|
; zgrid : (number number -> number) listof-number listof-number -> listof-listof number
|
|
(define (zgrid func x-vals y-vals samples)
|
|
(map (lambda (x) (map (lambda (y) (func x y)) y-vals)) x-vals))
|
|
|
|
(provide (all-defined))
|
|
|
|
(require mzlib/class mzlib/etc)
|
|
|
|
)
|