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< NodeHandle, Vector > *Neighbors, Repository *repository, int groupSize)
virtual void move ()
 Defined in subclasses only.

Protected Attributes

Repository * repository
int groupNr
int groupSize


Constructor & Destructor Documentation

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

00004              :MovementGenerator(areaDimension, speed, Neighbors)
00005 {
00006     // get access to the repository
00007     this->repository = repository;
00008     this->groupSize = groupSize;
00009 
00010     groupNr = repository->getCounter() / groupSize;
00011 
00012     if((repository->getCounter() % groupSize) == 0) {
00013         target.setValue(uniform(-areaDimension, areaDimension), uniform(-areaDimension, areaDimension));
00014         repository->setPosition_size(repository->getPosition_size() + 1);
00015         repository->setPosition(groupNr, target);
00016     }
00017     else {
00018         target = repository->getPosition(groupNr);
00019     }
00020 
00021     repository->setCounter(repository->getCounter() + 1);
00022 
00023     Vector temp;
00024     temp.setValue(uniform(-20.0*speed, 20.0*speed), uniform(-20.0*speed, 20.0*speed));
00025     position = target + temp;
00026     flock();
00027     testBounds();
00028     direction = target - position;
00029     direction.normalize();
00030 }


Member Function Documentation

void groupRoaming::move (  )  [virtual]

Defined in subclasses only.

Implements MovementGenerator.

00033 {
00034     if(groupNr <= repository->getCounter() / groupSize) { // not all members have spawned yet so just move a little
00035         flock();
00036         testBounds();
00037     }
00038     else {
00039         position += direction * speed;
00040         flock();
00041         testBounds();
00042         if(repository->getPosition(groupNr) != target) {
00043             target = repository->getPosition(groupNr);
00044         }
00045         if(target.distsqr(position) < 4.0*speed*speed) {
00046             target.setValue(uniform(-areaDimension, areaDimension), uniform(-areaDimension, areaDimension));
00047             repository->setPosition(groupNr, target);
00048         }
00049     }
00050     direction = target - position;
00051     direction.normalize();
00052 }


Member Data Documentation

int groupRoaming::groupNr [protected]

int groupRoaming::groupSize [protected]

Repository* groupRoaming::repository [protected]


The documentation for this class was generated from the following files:
Generated on Wed Apr 4 13:37:06 2007 for ITM OverSim by  doxygen 1.4.7