Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /tests/lamont-tests/boids.diderot
ViewVC logotype

Annotation of /tests/lamont-tests/boids.diderot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4640 - (view) (download)

1 : glk 4640 #version 2
2 :    
3 :     real[] initVelocities = load_sequence("velocities.nrrd");
4 :     real[] initPosns = load_sequence("posns.nrrd");
5 :     int numBoids = 100;
6 :     input real boidRadius = 5;
7 :     input real queryRadius = 50;
8 :     input real DESIRED_SEPARTION = 30;
9 :     int MAX_SPEED = 2;
10 :     real MAX_FORCE = 0.05;
11 :     real boundsFactor = 10.0;
12 :     input int width = 800;
13 :     input int height = 600;
14 :     int NORTH = 0;
15 :     int SOUTH = 1;
16 :     int WEST = 2;
17 :     int EAST = 3;
18 :     int steps = 0;
19 :    
20 :     strand Boid(int i,real vx, real vy, real px, real py) {
21 :     vec2 pos = [px,py];
22 :     vec2 vel = [vx,vy];
23 :     int id = i;
24 :     output vec4 boidInfo = [pos[0],pos[1],vel[0],vel[1]];
25 :     //output real value = 0.0;
26 :     update {
27 :    
28 :     vec2 cohereVec = [0.0,0.0];
29 :     vec2 alignVec = [0.0,0.0];
30 :     vec2 seperateVec = [0.0,0.0];
31 :     vec4 wrapDimensions = [-boundsFactor,
32 :     height + boundsFactor,
33 :     -boundsFactor,
34 :     width + boundsFactor];
35 :     int count = 0;
36 :     int count2 = 0;
37 :     foreach(Boid neighbor in sphere(queryRadius)){
38 :     real d = |pos - neighbor.pos|;
39 :     if(d > 0) {
40 :     cohereVec += neighbor.pos;
41 :     alignVec += neighbor.vel;
42 :     count+=1;
43 :     if(d < DESIRED_SEPARTION) {
44 :     seperateVec = seperateVec + (normalize(pos-neighbor.pos)/d);
45 :     count2+=1;
46 :     }
47 :     }
48 :     }
49 :    
50 :     if(count > 0) {
51 :     cohereVec /= real(count);
52 :     alignVec /= real(count);
53 :     }
54 :     if(count2 > 0) {
55 :     seperateVec /= real(count2);
56 :     }
57 :    
58 :     // limit the force
59 :     if ( count != 0 && |alignVec| > MAX_FORCE) {
60 :     alignVec = normalize(alignVec);
61 :     alignVec *= MAX_FORCE;
62 :     }
63 :    
64 :     real diff = |cohereVec - pos|;
65 :    
66 :     if(diff > 0 && count != 0){
67 :    
68 :     cohereVec = normalize(cohereVec);
69 :    
70 :     if(diff < 100.0) {
71 :     cohereVec *= (MAX_SPEED*(diff/100.0));
72 :     }else {
73 :     cohereVec *= MAX_SPEED;
74 :     }
75 :    
76 :     cohereVec -= vel;
77 :    
78 :     // limit the force
79 :     if (|cohereVec| > MAX_FORCE) {
80 :     cohereVec = normalize(cohereVec);
81 :     cohereVec *= MAX_FORCE;
82 :     }
83 :     }
84 :     else{
85 :     cohereVec = [0.0,0.0];
86 :     }
87 :    
88 :    
89 :     vec2 acceleration = cohereVec + alignVec + seperateVec;
90 :    
91 :     vel += acceleration;
92 :    
93 :     if (|vel| > MAX_SPEED){
94 :     vel = normalize(vel);
95 :     vel *= MAX_SPEED;
96 :     }
97 :    
98 :    
99 :     pos += vel;
100 :    
101 :    
102 :     //Wrapping Code, if a boid goes outside the window
103 :     real posX = wrapDimensions[EAST] if pos[0] < wrapDimensions[WEST]
104 :     else wrapDimensions[WEST] if pos[0] > wrapDimensions[EAST]
105 :     else pos[0];
106 :    
107 :     real posY = wrapDimensions[SOUTH] if pos[1] < wrapDimensions[NORTH]
108 :     else wrapDimensions[NORTH] if pos[1] > wrapDimensions[SOUTH]
109 :     else pos[1];
110 :    
111 :     pos = [posX,posY];
112 :    
113 :    
114 :    
115 :    
116 :     boidInfo = [pos[0],pos[1], vel[0], vel[1]];
117 :    
118 :    
119 :     if(steps > 500){
120 :     //value = boidInfo[0] + boidInfo[1] + boidInfo[2] + boidInfo[3];
121 :     stabilize;
122 :     }
123 :    
124 :     }
125 :     }
126 :    
127 :     create_collection {
128 :     Boid(i, initVelocities{i*2}, initVelocities{i*2+1}, initPosns{i*2}, initPosns{i*2+1})
129 :     | i in 0 .. numBoids-1
130 :     }
131 :    
132 :     update {
133 :     steps += 1;
134 :     }

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0