add MobilityModel::GetSpeed method and implement it in all mobility models
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user