Created
June 27, 2021 01:47
-
-
Save samth/385182bcd0c1bc26795aa7e58a81f80b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#lang typed/racket | |
(require typed/racket/draw | |
plot/private/common/parameters ;; just for plot-width, plot-height | |
) | |
(: transform-points : (Listof (List Integer Real)) -> (Listof (Pair Real Real))) | |
(define (transform-points p) | |
(define-values (min-x min-y max-x max-y) | |
(for/fold ([min-x : Integer (first (first points))] | |
[min-y : Real (second (first points))] | |
[max-x : Integer (first (first points))] | |
[max-y : Real (second (first points))]) | |
([point : (List Integer Real) (in-list (rest points))]) | |
(define x (first point)) | |
(define y (second point)) | |
(values (min min-x x) (min min-y y) (max max-x x) (max max-y y)))) | |
(define dx (- max-x min-x)) | |
(define dy (- max-y min-y)) | |
(define w (plot-width)) | |
(define h (plot-height)) | |
(: transform : (List Integer Real) -> (Pair Real Real)) | |
(define (transform point) | |
(define x (first point)) | |
(define y (second point)) | |
(cons (* w (/ (- x min-x) dx)) | |
(* h (- dy (/ (- y min-y) dy))))) | |
(map transform points)) | |
(: do-manual-plot : (Listof (List Integer Real)) -> Any) | |
(define (do-manual-plot points) | |
(define bm (make-object bitmap% (plot-width) (plot-height))) | |
(define dc (new bitmap-dc% [bitmap bm])) | |
(send dc set-pen (send the-pen-list find-or-create-pen "purple" 1 'solid)) | |
(define plot-points (transform-points points)) | |
(send dc draw-lines plot-points) | |
bm) | |
(: do-manual-plot/individual-lines : (Listof (List Integer Real)) -> Any) | |
(define (do-manual-plot/individual-lines points) | |
(define bm (make-object bitmap% (plot-width) (plot-height))) | |
(define dc (new bitmap-dc% [bitmap bm])) | |
(send dc set-pen (send the-pen-list find-or-create-pen "purple" 1 'solid)) | |
(define plot-points (transform-points points)) | |
(for ([p1 (in-list plot-points)] | |
[p2 (in-list (rest plot-points))]) | |
(send dc draw-line (car p1) (cdr p1) (car p2) (cdr p2))) | |
bm) | |
'typed | |
(collect-garbage) | |
(collect-garbage) | |
(define points (build-list 100000 (lambda ([x : Integer]) (list x (random))))) | |
(printf "individual draw-line calls~%") | |
(time (do-manual-plot/individual-lines points)) | |
(collect-garbage) | |
(collect-garbage) | |
(printf "single draw-lines call~%") | |
(time (do-manual-plot points)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#lang racket | |
(require racket/draw | |
plot/private/common/parameters ;; just for plot-width, plot-height | |
) | |
(define (transform-points p) | |
(define-values (min-x min-y max-x max-y) | |
(for/fold ([min-x (first (first points))] | |
[min-y (second (first points))] | |
[max-x (first (first points))] | |
[max-y (second (first points))]) | |
([point (in-list (rest points))]) | |
(define x (first point)) | |
(define y (second point)) | |
(values (min min-x x) (min min-y y) (max max-x x) (max max-y y)))) | |
(define dx (- max-x min-x)) | |
(define dy (- max-y min-y)) | |
(define w (plot-width)) | |
(define h (plot-height)) | |
(define (transform point) | |
(define x (first point)) | |
(define y (second point)) | |
(cons (* w (/ (- x min-x) dx)) | |
(* h (- dy (/ (- y min-y) dy))))) | |
(map transform points)) | |
(define (do-manual-plot points) | |
(define bm (make-object bitmap% (plot-width) (plot-height))) | |
(define dc (new bitmap-dc% [bitmap bm])) | |
(send dc set-pen (send the-pen-list find-or-create-pen "purple" 1 'solid)) | |
(define plot-points (transform-points points)) | |
(send dc draw-lines plot-points) | |
bm) | |
(define (do-manual-plot/individual-lines points) | |
(define bm (make-object bitmap% (plot-width) (plot-height))) | |
(define dc (new bitmap-dc% [bitmap bm])) | |
(send dc set-pen (send the-pen-list find-or-create-pen "purple" 1 'solid)) | |
(define plot-points (transform-points points)) | |
(for ([p1 (in-list plot-points)] | |
[p2 (in-list (rest plot-points))]) | |
(send dc draw-line (car p1) (cdr p1) (car p2) (cdr p2))) | |
bm) | |
'untyped | |
(collect-garbage) | |
(collect-garbage) | |
(define points (build-list 100000 (lambda (x) (list x (random))))) | |
(printf "individual draw-line calls~%") | |
(time (do-manual-plot/individual-lines points)) | |
(collect-garbage) | |
(collect-garbage) | |
(printf "single draw-lines call~%") | |
(time (do-manual-plot points)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment