add MobilityModel::GetSpeed method and implement it in all mobility models

This commit is contained in:
Mathieu Lacage
2007-07-19 10:28:48 +02:00
parent 39ba117abf
commit b2d7640a1d
14 changed files with 62 additions and 43 deletions

View File

@@ -77,6 +77,16 @@ HierarchicalMobilityModel::DoSet (const Position &position)
position.z - parentPosition.z);
m_child->Set (childPosition);
}
Speed
HierarchicalMobilityModel::DoGetSpeed (void) const
{
Speed parentSpeed = m_parent->GetSpeed ();
Speed childSpeed = m_child->GetSpeed ();
Speed speed (parentSpeed.dx + childSpeed.dx,
parentSpeed.dy + childSpeed.dy,
parentSpeed.dz + childSpeed.dz);
return speed;
}
void
HierarchicalMobilityModel::ParentChanged (Ptr<const MobilityModel> model)

View File

@@ -38,6 +38,7 @@ public:
private:
virtual Position DoGet (void) const;
virtual void DoSet (const Position &position);
virtual Speed DoGetSpeed (void) const;
void ParentChanged (Ptr<const MobilityModel> model);
void ChildChanged (Ptr<const MobilityModel> model);

View File

@@ -39,6 +39,11 @@ MobilityModel::Get (void) const
{
return DoGet ();
}
Speed
MobilityModel::GetSpeed (void) const
{
return DoGetSpeed ();
}
void
MobilityModel::Set (double x, double y, double z)

View File

@@ -23,6 +23,7 @@
#include "ns3/object.h"
#include "position.h"
#include "speed.h"
namespace ns3 {
@@ -45,9 +46,9 @@ public:
* Unit is meters
*/
Position Get (void) const;
void Set (double x, double y, double z);
void Set (const Position &position);
Speed GetSpeed (void) const;
/**
* \param position a reference to another position object instance
* \returns the distance between the two objects.
@@ -74,6 +75,7 @@ private:
*/
virtual Position DoGet (void) const = 0;
virtual void DoSet (const Position &position) = 0;
virtual Speed DoGetSpeed (void) const = 0;
};
}; // namespace ns3

View File

@@ -186,6 +186,11 @@ RandomDirectionMobilityModel::DoSet (const Position &position)
Simulator::Remove (m_event);
m_event = Simulator::ScheduleNow (&RandomDirectionMobilityModel::Start, this);
}
Speed
RandomDirectionMobilityModel::DoGetSpeed (void) const
{
return m_helper.GetSpeed ();
}

View File

@@ -72,6 +72,7 @@ class RandomDirectionMobilityModel : public MobilityModel
virtual void DoDispose (void);
virtual Position DoGet (void) const;
virtual void DoSet (const Position &position);
virtual Speed DoGetSpeed (void) const;
static const double PI;
Ptr<RandomDirectionParameters> m_parameters;

View File

@@ -192,6 +192,12 @@ RandomWalk2dMobilityModel::DoSet (const Position &position)
Simulator::Remove (m_event);
m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this);
}
Speed
RandomWalk2dMobilityModel::DoGetSpeed (void) const
{
return m_helper.GetSpeed ();
}
} // namespace ns3

View File

@@ -111,6 +111,7 @@ class RandomWalk2dMobilityModel : public MobilityModel
virtual void DoDispose (void);
virtual Position DoGet (void) const;
virtual void DoSet (const Position &position);
virtual Speed DoGetSpeed (void) const;
StaticSpeedHelper m_helper;
EventId m_event;

View File

@@ -122,6 +122,11 @@ RandomWaypointMobilityModel::DoSet (const Position &position)
Simulator::Remove (m_event);
Simulator::ScheduleNow (&RandomWaypointMobilityModel::Start, this);
}
Speed
RandomWaypointMobilityModel::DoGetSpeed (void) const
{
return m_helper.GetSpeed ();
}
} // namespace ns3

View File

@@ -60,6 +60,8 @@ private:
void Start (void);
virtual Position DoGet (void) const;
virtual void DoSet (const Position &position);
virtual Speed DoGetSpeed (void) const;
StaticSpeedHelper m_helper;
Ptr<RandomWaypointMobilityModelParameters> m_parameters;
EventId m_event;

View File

@@ -22,22 +22,15 @@
namespace ns3 {
const InterfaceId StaticMobilityModel::iid = MakeInterfaceId ("StaticMobilityModel", MobilityModel::iid);
const ClassId StaticMobilityModel::cid = MakeClassId<StaticMobilityModel,double, double> ("StaticMobilityModel",
StaticMobilityModel::iid);
const ClassId StaticMobilityModel::cid = MakeClassId<StaticMobilityModel> ("StaticMobilityModel",
MobilityModel::iid);
StaticMobilityModel::StaticMobilityModel ()
: m_x (0.0), m_y (0.0), m_z (0.0)
{
SetInterfaceId (StaticMobilityModel::iid);
}
StaticMobilityModel::StaticMobilityModel (double x, double y)
: m_x (x), m_y (y), m_z (0.0)
{
SetInterfaceId (StaticMobilityModel::iid);
}
StaticMobilityModel::StaticMobilityModel (double x, double y, double z)
: m_x (x), m_y (y), m_z (z)
StaticMobilityModel::StaticMobilityModel (const Position &position)
: m_position (position)
{
SetInterfaceId (StaticMobilityModel::iid);
}
@@ -47,24 +40,18 @@ StaticMobilityModel::~StaticMobilityModel ()
Position
StaticMobilityModel::DoGet (void) const
{
return Position (m_x, m_y, m_z);
return m_position;
}
void
StaticMobilityModel::DoSet (const Position &position)
{
bool changed = false;
if (m_x != position.x || m_y != position.y || m_z != position.z)
{
changed = true;
}
m_x = position.x;
m_y = position.y;
m_z = position.z;
if (changed)
{
NotifyCourseChange ();
}
m_position = position;
NotifyCourseChange ();
}
Speed
StaticMobilityModel::DoGetSpeed (void) const
{
return Speed ();
}
}; // namespace ns3

View File

@@ -34,37 +34,25 @@ namespace ns3 {
class StaticMobilityModel : public MobilityModel
{
public:
static const InterfaceId iid;
static const ClassId cid;
/**
* Create a position located at coordinates (0,0,0)
*/
StaticMobilityModel ();
/**
* \param x x coordinate
* \param y y coordinate
*
* Create a position located at coordinates (x,y,0).
* Unit is meters
*/
StaticMobilityModel (double x, double y);
/**
* \param x x coordinate
* \param y y coordinate
* \param z z coordinate
*
* Create a position located at coordinates (x,y,z).
* Unit is meters
*/
StaticMobilityModel (double x, double y, double z);
StaticMobilityModel (const Position &position);
virtual ~StaticMobilityModel ();
private:
virtual Position DoGet (void) const;
virtual void DoSet (const Position &position);
double m_x;
double m_y;
double m_z;
virtual Speed DoGetSpeed (void) const;
Position m_position;
};
}; // namespace ns3

View File

@@ -68,5 +68,10 @@ StaticSpeedMobilityModel::DoSet (const Position &position)
m_helper.InitializePosition (position);
NotifyCourseChange ();
}
Speed
StaticSpeedMobilityModel::DoGetSpeed (void) const
{
return m_helper.GetSpeed ();
}
}; // namespace ns3

View File

@@ -64,6 +64,7 @@ public:
private:
virtual Position DoGet (void) const;
virtual void DoSet (const Position &position);
virtual Speed DoGetSpeed (void) const;
void Update (void) const;
StaticSpeedHelper m_helper;
};