[Fluxus] something fishy with custom pdata in particles

evan.raskob [lists] lists at lowfrequency.org
Wed Sep 16 03:07:15 PDT 2009


Hi there fluxers,

Something odd is happening when I try and create custom pdata,  
following the example in the particles.scm file.  I use pdata-set to  
create a pdata field called "age" which will be the particle age, and  
a field called "p-end" which will be the final position of the  
particle, but I am unable to alter the "age" or "p-end" fields (they  
are always 0) whereas I can alter the "p0" and the rest of the fields  
just fine.  Try the code below - it will complain that "p-end" is not  
a vector in the (vdiv ...) function n (update)

(Note: this code is just to try things out - there are definitely  
better ways of doing this! I would NOT use this for any real purpose  
other than teaching / learning)



;--- begin moving-particles.scm  -------------

(clear)

(define particle-count 100)

(define stuff
     (with-state
         (hint-anti-alias)
         (build-particles particle-count)))


; init one particle
(define (init-particles n)
     (pdata-set "p" n (vector -10 0 0))
     (pdata-set "p-end" n (vector (+ (* 10 (flxrnd)) 10) 0 (* 3  
(flxrnd))))
     (pdata-set "age" n 0)
     (pdata-set "c" n (vector 1 1 1))
     (pdata-set "s" n (vector 1 1 1))
     (cond [(> n 0)
             (init-particles (- n 1))]
         [else 0])
     )

(with-primitive stuff
     (init-particles (pdata-size))
     (pdata-copy "p" "p0")
     )

(define (update p)
     (with-primitive p

         (pdata-map!
             (lambda (age)
                 (modulo (+ age 1) 1000)) "age")

         (pdata-map!
             (lambda (p p0 p-end age)
                 (vdiv (vsub p-end p0) age))
             "p" "p0" "p-end" "age")
         )
     )

(every-frame
     (update stuff))



More information about the Fluxus mailing list