/** Rule of Cohesion. ** @param bj Pointer to the boid ** @return The velocity vector for Cohesion **/ vector Cohesion(Boid* bj){ vector c = NullVector(); It itb = flock->getIter(); List boids = flock->getBoids(); Boid* tmp; for (itb = boids.begin(); itb!=boids.end(); itb++) { tmp = &(*itb); float d = 1 + Norm(Diff(bj->getPos(), tmp->getPos())); if (bj->getID() != tmp->getID() && d < 20) c = Add(c, Mult(tmp->getPos(),1/(2*d*d))); } c = Mult(c,(float(1)/float(boids.size()-1))); return Diff(c,bj->getPos()); }
/** Rule of Alignment. ** @param bj Pointer to the boid ** @return The velocity vector for Alignment **/ vector Alignment(Boid* bj) { vector mspeed = NullVector(); It itb = flock->getIter(); List boids = flock->getBoids(); Boid* tmp; for (itb = boids.begin(); itb!=boids.end(); itb++) { tmp = &(*itb); float d = 1 + Norm(Diff(bj->getPos(), tmp->getPos())); if (bj->getID() != tmp->getID() && d < 20) mspeed = Add (mspeed, Mult(tmp->getSpeed(),1/(d*d))); } mspeed = Mult(mspeed,(float(1)/float(boids.size()-1))); return Diff(mspeed,bj->getSpeed()); }