#lang racket ;; Racket (require "../record-vector.rkt") (provide main) (define N-Vehicles 100000) (define (rndx) (* (random) 1000.)) (define (rndw) (+ 900 (random 200))) (define-syntax dotimes (syntax-rules () ((_ n f ...) (do ((i 0 (+ 1 i))) ((= i n)) f ...)))) (define (main) (let* ((step 0.1) ;; sec (friction 0.01) (v (make-rv '#:x 0.0 '#:speed 0.0 '#:accel 0.1 '#:mass 1000)) (vecs (do ((i 0 (+ 1 i)) (vs (make-vector N-Vehicles))) ((= i (vector-length vs)) vs) (vector-set! vs i (rv-clone v '#:mass (rndw)))))) (dotimes 1000 (for ([vh vecs]) (rv-set! vh '#:x (+ (rv-ref vh '#:x) (* (rv-ref vh '#:speed) step))) (rv-set! vh '#:speed (+ (rv-ref vh '#:speed) (* (rv-ref vh '#:accel) step))))) (format "[0].x = ~a" (rv-ref (vector-ref vecs 0) '#:x)) ))