Last active
November 29, 2017 01:00
-
-
Save sromano/0576e989eba7cfde234bbb7679f35989 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
;;Constants | |
(define g 9.8) | |
;;Object Samplers | |
(define (sample-position) (uniform 1 1000)) | |
(define (sample-velocity) (uniform 1 10)) | |
(define (sample-object) | |
(list (sample-velocity) | |
(sample-velocity) | |
(sample-velocity) | |
(sample-position) | |
(sample-position) | |
(sample-position) | |
)) | |
(define (sample-world) | |
(let ((n (ceil (exponential 0.5)))) | |
(repeat n sample-object))) | |
;;Getters | |
(define (vx object) (first object)) | |
(define (vy object) (second object)) | |
(define (vz object) (third object)) | |
(define (x object) (fourth object)) | |
(define (y object) (fifth object)) | |
(define (z object) (sixth object)) | |
;;Setters | |
(define (update-vx object value) (update-list object 0 value)) | |
(define (update-vy object value) (update-list object 1 value)) | |
(define (update-vz object value) (update-list object 2 value)) | |
(define (update-x object value) (update-list object 3 value)) | |
;;Note: Floor was added (just a note related to how we think) | |
(define (update-y object value) (let ((yval (if (leq value 0) 0 value))) (update-list object 4 yval))) | |
(define (update-z object value) (update-list object 5 value)) | |
;;Advance World | |
(define (step world) (map object-step world)) | |
(define (stepN world n) (if (eq? n 0) world (stepN (step world) (- n 1)))) | |
;;Advance Object | |
(define (object-step object) | |
(update-y | |
(update-vy object (+ g (vy object))) | |
(- (y object) (vy object)))) | |
;;Running example | |
(define length-of-run 20) | |
(define running-steps (iota length-of-run 1)) | |
(define world (sample-world)) | |
(define motion (map (lambda (n) (stepN world n)) running-steps)) | |
(define (n-object-motion n) (map (lambda (stp) (list-elt stp n)) motion)) | |
(define (n-object-y n) (map y (n-object-motion n))) | |
;;Draw | |
(map (lambda (n) (lineplot | |
(map (lambda (s) (pair s (list-elt (n-object-y n) s))) running-steps) | |
(string-append "Y position over time for object #" (number->string n)))) (iota (length world) 1)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment