|
MiXiM
2.3
|
Rectangle movement model. See NED file for more info. More...
#include <RectangleMobility.h>


Protected Member Functions | |
| virtual void | initialize (int stage) |
| Initializes mobility model parameters. | |
| virtual void | initializePosition () |
| Initializes the position according to the mobility model. | |
| virtual void | move () |
| Move the host. | |
Protected Attributes | |
| double | speed |
| speed of the host | |
| double | d |
| distance from (x1,y1), measured clockwise on the perimeter | |
| double | corner1 |
| double | corner2 |
| double | corner3 |
| double | corner4 |
Rectangle movement model. See NED file for more info.
| void RectangleMobility::initialize | ( | int | stage | ) | [protected, virtual] |
Initializes mobility model parameters.
If the host is not stationary it calculates a random position on the rectangle.
Reimplemented from MovingMobilityBase.
References MobilityBase::constraintAreaMin, d, speed, and MovingMobilityBase::stationary.
{
MovingMobilityBase::initialize(stage);
EV << "initializing RectangleMobility stage " << stage << endl;
if (stage == 0)
{
speed = par("speed");
stationary = (speed == 0);
// calculate helper variables
double dx = constraintAreaMax.x - constraintAreaMin.x;
double dy = constraintAreaMax.y - constraintAreaMin.y;
corner1 = dx;
corner2 = corner1 + dy;
corner3 = corner2 + dx;
corner4 = corner3 + dy;
// determine start position
double startPos = par("startPos");
startPos = fmod(startPos, 4);
if (startPos < 1)
d = startPos * dx; // top side
else if (startPos < 2)
d = corner1 + (startPos - 1) * dy; // right side
else if (startPos < 3)
d = corner2 + (startPos - 2) * dx; // bottom side
else
d = corner3 + (startPos - 3) * dy; // left side
WATCH(d);
}
}