X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=extra%2Fboids%2Fsimulation%2Fsimulation.factor;h=1310d2ddc6ae5f32e81580716fe15cd9b3938363;hp=b2df09f8c060ddf9cbcef1be6295209df79ee222;hb=6d4293b5822d769619f66e46e64b704ddfe41b43;hpb=b7bb69b178712e9d135362ebd6efa69c9b8371ba diff --git a/extra/boids/simulation/simulation.factor b/extra/boids/simulation/simulation.factor index b2df09f8c0..1310d2ddc6 100644 --- a/extra/boids/simulation/simulation.factor +++ b/extra/boids/simulation/simulation.factor @@ -8,7 +8,7 @@ IN: boids.simulation CONSTANT: WIDTH 512 CONSTANT: HEIGHT 512 -TUPLE: behaviour +TUPLE: behavior { weight float } { radius float } { angle-cos float } ; @@ -41,28 +41,28 @@ C: boid : in-view? ( self other angle-cos -- ? ) [ relative-angle ] dip >= ; inline -:: within-neighborhood? ( self other behaviour -- ? ) +:: within-neighborhood? ( self other behavior -- ? ) self other { [ eq? not ] - [ behaviour radius>> in-radius? ] - [ behaviour angle-cos>> in-view? ] + [ behavior radius>> in-radius? ] + [ behavior angle-cos>> in-view? ] } 2&& ; inline -:: neighbors ( boid boids behaviour -- neighbors ) - boid boids [ behaviour within-neighborhood? ] with filter ; +:: neighbors ( boid boids behavior -- neighbors ) + boid boids [ behavior within-neighborhood? ] with filter ; -GENERIC: force ( neighbors boid behaviour -- force ) +GENERIC: force ( neighbors boid behavior -- force ) -:: (force) ( boid boids behaviour -- force ) - boid boids behaviour neighbors - [ { 0.0 0.0 } ] [ boid behaviour force ] if-empty ; +:: (force) ( boid boids behavior -- force ) + boid boids behavior neighbors + [ { 0.0 0.0 } ] [ boid behavior force ] if-empty ; : wrap-pos ( pos -- pos ) WIDTH HEIGHT 2array [ [ + ] keep mod ] 2map ; -:: simulate ( boids behaviours dt -- boids ) +:: simulate ( boids behaviors dt -- boids ) boids [| boid | - boid boids behaviours + boid boids behaviors [ [ (force) ] keep weight>> v*n ] 2with map vsum :> a boid vel>> a dt v*n v+ normalize :> vel @@ -78,21 +78,21 @@ GENERIC: force ( neighbors boid behaviour -- force ) ] replicate ; -TUPLE: cohesion < behaviour ; -TUPLE: alignment < behaviour ; -TUPLE: separation < behaviour ; +TUPLE: cohesion < behavior ; +TUPLE: alignment < behavior ; +TUPLE: separation < behavior ; C: cohesion C: alignment C: separation -M: cohesion force ( neighbors boid behaviour -- force ) +M: cohesion force ( neighbors boid behavior -- force ) drop [ [ pos>> ] map vavg ] [ pos>> ] bi* v- normalize ; -M: alignment force ( neighbors boid behaviour -- force ) +M: alignment force ( neighbors boid behavior -- force ) 2drop [ vel>> ] map vsum normalize ; -M:: separation force ( neighbors boid behaviour -- force ) - behaviour radius>> :> r +M:: separation force ( neighbors boid behavior -- force ) + behavior radius>> :> r boid pos>> neighbors [ pos>> v- [ normalize ] [ r v/n ] bi v- ] with map vsum ;