diff -r 9bddd87225a9 src/mobility/constant-acceleration-mobility-model.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mobility/constant-acceleration-mobility-model.cc Wed Jan 28 18:28:59 2009 +0000 @@ -0,0 +1,79 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Gustavo Carneiro + */ +#include "constant-acceleration-mobility-model.h" +#include "ns3/simulator.h" + +namespace ns3 { + +NS_OBJECT_ENSURE_REGISTERED (ConstantAccelerationMobilityModel); + +TypeId ConstantAccelerationMobilityModel::GetTypeId (void) +{ + static TypeId tid = TypeId ("ns3::ConstantAccelerationMobilityModel") + .SetParent () + .AddConstructor (); + return tid; +} + +ConstantAccelerationMobilityModel::ConstantAccelerationMobilityModel () +{} + +ConstantAccelerationMobilityModel::~ConstantAccelerationMobilityModel () +{} + +inline Vector +ConstantAccelerationMobilityModel::DoGetVelocity (void) const +{ + double t = (Simulator::Now () - m_baseTime).GetSeconds (); + return Vector (m_baseVelocity.x + m_acceleration.x*t, + m_baseVelocity.y + m_acceleration.y*t, + m_baseVelocity.z + m_acceleration.z*t); +} + +inline Vector +ConstantAccelerationMobilityModel::DoGetPosition (void) const +{ + double t = (Simulator::Now () - m_baseTime).GetSeconds (); + double half_t_square = t*t*0.5; + return Vector (m_basePosition.x + m_baseVelocity.x*t + m_acceleration.x*half_t_square, + m_basePosition.y + m_baseVelocity.y*t + m_acceleration.y*half_t_square, + m_basePosition.z + m_baseVelocity.z*t + m_acceleration.z*half_t_square); +} + +void +ConstantAccelerationMobilityModel::DoSetPosition (const Vector &position) +{ + m_baseVelocity = DoGetVelocity (); + m_baseTime = Simulator::Now (); + m_basePosition = position; + NotifyCourseChange (); +} + +void +ConstantAccelerationMobilityModel::SetVelocityAndAcceleration (const Vector &velocity, + const Vector &acceleration) +{ + m_basePosition = DoGetPosition (); + m_baseTime = Simulator::Now (); + m_baseVelocity = velocity; + m_acceleration = acceleration; + NotifyCourseChange (); +} + + +}; // namespace ns3 diff -r 9bddd87225a9 src/mobility/constant-acceleration-mobility-model.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mobility/constant-acceleration-mobility-model.h Wed Jan 28 18:28:59 2009 +0000 @@ -0,0 +1,56 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Gustavo Carneiro + */ +#ifndef CONSTANT_ACCELERATION_MOBILITY_MODEL_H +#define CONSTANT_ACCELERATION_MOBILITY_MODEL_H + +#include "mobility-model.h" +#include "ns3/nstime.h" + +namespace ns3 { + +/** + * \brief a position model for which the current acceleration does not + * change once it has been set and until it is set again + * explicitely to a new value. + */ +class ConstantAccelerationMobilityModel : public MobilityModel +{ +public: + static TypeId GetTypeId (void); + /** + * Create position located at coordinates (0,0,0) with + * speed (0,0,0). + */ + ConstantAccelerationMobilityModel (); + virtual ~ConstantAccelerationMobilityModel (); + void SetVelocityAndAcceleration (const Vector &velocity, const Vector &acceleration); + +private: + virtual Vector DoGetPosition (void) const; + virtual void DoSetPosition (const Vector &position); + virtual Vector DoGetVelocity (void) const; + + Time m_baseTime; + Vector m_basePosition; + Vector m_baseVelocity; + Vector m_acceleration; +}; + +}; // namespace ns3 + +#endif /* CONSTANT_ACCELERATION_MOBILITY_MODEL_H */ diff -r 9bddd87225a9 src/mobility/wscript --- a/src/mobility/wscript Wed Jan 28 11:06:50 2009 +0000 +++ b/src/mobility/wscript Wed Jan 28 18:28:59 2009 +0000 @@ -14,6 +14,7 @@ 'random-waypoint-mobility-model.cc', 'random-walk-2d-mobility-model.cc', 'random-direction-2d-mobility-model.cc', + 'constant-acceleration-mobility-model.cc', ] headers = bld.new_task_gen('ns3header') @@ -30,4 +31,5 @@ 'random-waypoint-mobility-model.h', 'random-walk-2d-mobility-model.h', 'random-direction-2d-mobility-model.h', + 'constant-acceleration-mobility-model.h', ]