#include <MovementGenerator.h>
Inheritance diagram for MovementGenerator:
Public Member Functions | ||||
MovementGenerator (double areaDimension, double speed, std::map< TransportAddress, Vector > *Neighbors) | ||||
| ||||
virtual | ~MovementGenerator () | |||
Standard destructor. | ||||
virtual void | move ()=0 | |||
Defined in subclasses only. | ||||
Vector | getPosition () | |||
| ||||
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 | |||
) |
areaDimension | Movement range from [-areaDimension, -areaDimension] to [areaDimension, areaDimension]. |
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] |