(draw-quad (list x y z) #:color (list r g b))))))
particles))
+(define (update-particle particle)
+ (match particle
+ ((x y z vx vy vz)
+ (let* ((distance-squared (+ (* x x) (* y y) (* z z)))
+ (distance (sqrt distance-squared))
+ (F (/ -200 distance-squared))
+ (ax (* F (/ x distance)))
+ (ay (* F (/ y distance)))
+ (az (* F (/ z distance))))
+ (list (+ x (* vx dt) (* ax half-dt-squared))
+ (+ y (* vy dt) (* ay half-dt-squared))
+ (+ z (* vz dt) (* az half-dt-squared))
+ (+ vx (* ax dt))
+ (+ vy (* ay dt))
+ (+ vz (* az dt)))))))
+
(define (update-particles dt)
(let ((half-dt-squared (* 0.5 dt dt)))
(set! *particles*
- (map
- (lambda (particle)
- (match particle
- ((x y z vx vy vz)
- (let* ((distance-squared (+ (* x x) (* y y) (* z z)))
- (distance (sqrt distance-squared))
- (F (/ -200 distance-squared))
- (ax (* F (/ x distance)))
- (ay (* F (/ y distance)))
- (az (* F (/ z distance))))
- (list (+ x (* vx dt) (* ax half-dt-squared))
- (+ y (* vy dt) (* ay half-dt-squared))
- (+ z (* vz dt) (* az half-dt-squared))
- (+ vx (* ax dt))
- (+ vy (* ay dt))
- (+ vz (* az dt)))))))
- *particles*))))
+ (map update-particle *particles*))))
(define (prepare-particles n)
(cond ((= n 0)