31 lines
752 B
Common Lisp
31 lines
752 B
Common Lisp
(lib 'plot) ;; interpolation functions
|
|
(lib 'compile)
|
|
|
|
;; rational version
|
|
(define (q-map-range x xmin xmax ymin ymax) (+ ymin (/ ( * (- x xmin) (- ymax ymin)) (- xmax xmin))))
|
|
|
|
;; float version
|
|
(define (map-range x xmin xmax ymin ymax) (+ ymin (// ( * (- x xmin) (- ymax ymin)) (- xmax xmin))))
|
|
; accelerate it
|
|
(compile 'map-range "-vf")
|
|
|
|
(q-map-range 4 0 10 -1 0)
|
|
→ -3/5
|
|
(map-range 4 0 10 -1 0)
|
|
→ -0.6
|
|
(linear 4 0 10 -1 0) ;; native
|
|
→ -0.6
|
|
|
|
(for [(x (in-range 0 10))] (writeln x (q-map-range x 0 10 -1 0) (map-range x 0 10 -1 0)))
|
|
|
|
0 -1 -1
|
|
1 -9/10 -0.9
|
|
2 -4/5 -0.8
|
|
3 -7/10 -0.7
|
|
4 -3/5 -0.6
|
|
5 -1/2 -0.5
|
|
6 -2/5 -0.4
|
|
7 -3/10 -0.3
|
|
8 -1/5 -0.2
|
|
9 -1/10 -0.1
|