groupRoaming Class Reference

#include <groupRoaming.h>

Inheritance diagram for groupRoaming:

MovementGenerator List of all members.

Detailed Description

Simulates nodes roaming the area in groups.


Public Member Functions

 groupRoaming (double areaDimension, double speed, std::map< TransportAddress, Vector > *Neighbors, Repository *repository, int groupSize)
virtual void move ()
 Defined in subclasses only.

Protected Attributes

Repositoryrepository
int groupNr
int groupSize


Constructor & Destructor Documentation

groupRoaming::groupRoaming ( double  areaDimension,
double  speed,
std::map< TransportAddress, Vector > *  Neighbors,
Repository repository,
int  groupSize 
)

00027              :MovementGenerator(areaDimension, speed, Neighbors)
00028 {
00029     // get access to the repository
00030     this->repository = repository;
00031     this->groupSize = groupSize;
00032 
00033     groupNr = repository->getCounter() / groupSize;
00034 
00035     if((repository->getCounter() % groupSize) == 0) {
00036         target.setValue(uniform(-areaDimension, areaDimension), uniform(-areaDimension, areaDimension));
00037         repository->setPosition_size(repository->getPosition_size() + 1);
00038         repository->setPosition(groupNr, target);
00039     }
00040     else {
00041         target = repository->getPosition(groupNr);
00042     }
00043 
00044     repository->setCounter(repository->getCounter() + 1);
00045 
00046     Vector temp;
00047     temp.setValue(uniform(-20.0*speed, 20.0*speed), uniform(-20.0*speed, 20.0*speed));
00048     position = target + temp;
00049     flock();
00050     testBounds();
00051     direction = target - position;
00052     direction.normalize();
00053 }


Member Function Documentation

void groupRoaming::move (  )  [virtual]

Defined in subclasses only.

Implements MovementGenerator.

00056 {
00057     if(groupNr <= repository->getCounter() / groupSize) { // not all members have spawned yet so just move a little
00058         flock();
00059         testBounds();
00060     }
00061     else {
00062         position += direction * speed;
00063         flock();
00064         testBounds();
00065         if(repository->getPosition(groupNr) != target) {
00066             target = repository->getPosition(groupNr);
00067         }
00068         if(target.distsqr(position) < 4.0*speed*speed) {
00069             target.setValue(uniform(-areaDimension, areaDimension), uniform(-areaDimension, areaDimension));
00070             repository->setPosition(groupNr, target);
00071         }
00072     }
00073     direction = target - position;
00074     direction.normalize();
00075 }


Member Data Documentation

Repository* groupRoaming::repository [protected]

int groupRoaming::groupNr [protected]

int groupRoaming::groupSize [protected]


The documentation for this class was generated from the following files:
Generated on Tue Jul 24 16:51:18 2007 for ITM OverSim by  doxygen 1.5.1