hotspotRoaming class More...
#include <hotspotRoaming.h>
Classes | |
| struct | Hotspot |
Public Member Functions | |
| hotspotRoaming (double areaDimension, double speed, NeighborMap *Neighbors, GlobalCoordinator *coordinator, CollisionList *CollisionRect) | |
| double | getDistanceFromHotspot () |
| virtual | ~hotspotRoaming () |
| virtual void | move () |
| Defined in subclasses only. | |
Protected Attributes | |
| std::vector< Hotspot > | hotspots |
| std::vector< Hotspot >::iterator | curHotspot |
| simtime_t | hotspotStayTime |
| bool | stayInHotspot |
hotspotRoaming class
Simulates nodes roaming an area with hotpots.
Definition at line 34 of file hotspotRoaming.h.
| hotspotRoaming::hotspotRoaming | ( | double | areaDimension, | |
| double | speed, | |||
| NeighborMap * | Neighbors, | |||
| GlobalCoordinator * | coordinator, | |||
| CollisionList * | CollisionRect | |||
| ) |
Definition at line 27 of file hotspotRoaming.cc.
:MovementGenerator(areaDimension, speed, Neighbors, coordinator, CollisionRect) { double prob = 0; std::vector<std::string> hotspotvec = cStringTokenizer(coordinator->par("Hotspots"), ";").asVector(); for( std::vector<std::string>::iterator it = hotspotvec.begin(); it != hotspotvec.end(); ++it ){ std::vector<std::string> hstr = cStringTokenizer(it->c_str(), ",").asVector(); if( hstr.size() != 4 ) { throw( cException("Error parsing Hotspots parameter") ); } // parse string, convert to hotspot data Hotspot h; h.center.x = convertString<double>( hstr[0] ); h.center.y = convertString<double>( hstr[1] ); h.radius = convertString<double>( hstr[2] ); h.probability = convertString<double>( hstr[3] ); prob += h.probability; // check hotspot bounds if( h.center.x - h.radius < 0 || h.center.y - h.radius < 0 || h.center.x + h.radius > areaDimension || h.center.y + h.radius > areaDimension ) { throw( cException("Error: Hotspot is outside the playground!") ); } if( prob > 1 ){ throw( cException("Error: Hotspot probabilities add up to > 1!") ); } hotspots.push_back(h); } curHotspot = hotspots.end(); if( (double) coordinator->par("HotspotStayTime") == (double) 0.0 ) { stayInHotspot = false; } else { stayInHotspot = true; } target.x = uniform(0.0, areaDimension); target.y = uniform(0.0, areaDimension); }
| virtual hotspotRoaming::~hotspotRoaming | ( | ) | [inline, virtual] |
Definition at line 49 of file hotspotRoaming.h.
{}
| double hotspotRoaming::getDistanceFromHotspot | ( | ) |
Definition at line 68 of file hotspotRoaming.cc.
{
double minDist=areaDimension;
for( std::vector<Hotspot>::iterator it = hotspots.begin(); it != hotspots.end(); ++it) {
double dist = sqrt(position.distanceSqr( it->center )) - it->radius;
if( dist < minDist ) minDist = dist;
}
return minDist;
}
| void hotspotRoaming::move | ( | ) | [virtual] |
Defined in subclasses only.
Implements MovementGenerator.
Definition at line 79 of file hotspotRoaming.cc.
{
flock();
position += direction * speed;
if(testBounds()) {
position += direction * speed * 2;
testBounds();
}
if(target.distanceSqr(position) < speed * speed) {
// arrived at current destination
// if we are not inside a hotspot, or do not want to
// stay inside the current hotspot (any more) ...
if ( !stayInHotspot || curHotspot == hotspots.end() ||
( hotspotStayTime > 0 && hotspotStayTime < simTime() ))
{
hotspotStayTime = 0;
// ... select next target hotspot
double rnd = uniform(0, 1);
for( curHotspot = hotspots.begin(); curHotspot != hotspots.end(); ++curHotspot ){
rnd -= curHotspot->probability;
if( rnd <= 0 ) break;
}
} else {
// stay in current hotspot
// start stayTimer if not already done
if ( hotspotStayTime == 0 ) {
hotspotStayTime = simTime() + coordinator->par("HotspotStayTime");
}
}
// chose target inside hotspot, or random target if no hotspot was selected
if( curHotspot != hotspots.end() ){
Vector2D dev;
// randomly select point inside the hotspot
double r = uniform( 0, 1 );
double theta = uniform( 0, 2*M_PI );
dev.x = sqrt( r ) * cos( theta );
dev.y = sqrt( r ) * sin( theta );
target = curHotspot->center + dev*curHotspot->radius;
} else {
target.x = uniform(0.0, areaDimension);
target.y = uniform(0.0, areaDimension);
}
}
}
std::vector<Hotspot>::iterator hotspotRoaming::curHotspot [protected] |
Definition at line 43 of file hotspotRoaming.h.
Referenced by hotspotRoaming(), and move().
std::vector<Hotspot> hotspotRoaming::hotspots [protected] |
Definition at line 42 of file hotspotRoaming.h.
Referenced by getDistanceFromHotspot(), hotspotRoaming(), and move().
simtime_t hotspotRoaming::hotspotStayTime [protected] |
Definition at line 44 of file hotspotRoaming.h.
Referenced by move().
bool hotspotRoaming::stayInHotspot [protected] |
Definition at line 45 of file hotspotRoaming.h.
Referenced by hotspotRoaming(), and move().
1.7.1