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 5034 - (view) (download)

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

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