#include <MovementGenerator.h>
Inheritance diagram for MovementGenerator:
Public Member Functions | |
MovementGenerator (double areaDimension, double speed, std::map< TransportAddress, Vector > *Neighbors) | |
@param areaDimension Movement range from [-areaDimension, -areaDimension] to [areaDimension, areaDimension]. | |
virtual | ~MovementGenerator () |
Standard destructor. | |
virtual void | move ()=0 |
Defined in subclasses only. | |
Vector | getPosition () |
@return Returns the current node position. | |
Protected Member Functions | |
void | testBounds () |
Prevents the node from leaving the defined area. | |
void | flock () |
Protected Attributes | |
double | areaDimension |
double | speed |
Vector | direction |
Vector | position |
Vector | target |
std::map< TransportAddress, Vector > * | Neighbors |
std::map< TransportAddress, Vector >::iterator | itNeighbors |
MovementGenerator::MovementGenerator | ( | double | areaDimension, | |
double | speed, | |||
std::map< TransportAddress, Vector > * | Neighbors | |||
) |
@param areaDimension Movement range from [-areaDimension, -areaDimension] to [areaDimension, areaDimension].
@param speed Movement speed in units per movement.
00027 { 00028 this->areaDimension = areaDimension; 00029 this->speed = speed; 00030 this->Neighbors = Neighbors; 00031 }
virtual void MovementGenerator::move | ( | ) | [pure virtual] |
Vector MovementGenerator::getPosition | ( | ) | [inline] |
void MovementGenerator::testBounds | ( | ) | [protected] |
Prevents the node from leaving the defined area.
00034 { 00035 if(position.getX() < -areaDimension) position.setX(-areaDimension); 00036 if(position.getX() > areaDimension) position.setX(areaDimension); 00037 if(position.getY() < -areaDimension) position.setY(-areaDimension); 00038 if(position.getY() > areaDimension) position.setY(areaDimension); 00039 }
void MovementGenerator::flock | ( | ) | [protected] |
00042 { 00043 Vector vFlock; 00044 vFlock.setValue(0.0, 0.0); 00045 for(itNeighbors = Neighbors->begin(); itNeighbors != Neighbors->end(); ++itNeighbors) { 00046 if(position.distsqr(itNeighbors->second) < 4.0*speed*speed) { 00047 Vector temp; 00048 temp = itNeighbors->second - position; 00049 temp.normalize(); 00050 vFlock += temp; 00051 } 00052 } 00053 vFlock.normalize(); 00054 vFlock = vFlock * (speed/2.0); 00055 position -= vFlock; 00056 }
double MovementGenerator::areaDimension [protected] |
double MovementGenerator::speed [protected] |
Vector MovementGenerator::direction [protected] |
Vector MovementGenerator::position [protected] |
Vector MovementGenerator::target [protected] |
std::map<TransportAddress, Vector>* MovementGenerator::Neighbors [protected] |
std::map<TransportAddress, Vector>::iterator MovementGenerator::itNeighbors [protected] |