--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/mobility/constant-acceleration-mobility-model.cc Tue Mar 10 14:27:58 2009 +0100
@@ -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 <gjc@inescporto.pt>
+ */
+#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<MobilityModel> ()
+ .AddConstructor<ConstantAccelerationMobilityModel> ();
+ 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/mobility/constant-acceleration-mobility-model.h Tue Mar 10 14:27:58 2009 +0100
@@ -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 <gjc@inescporto.pt>
+ */
+#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 */
--- a/src/mobility/wscript Tue Mar 10 14:24:56 2009 +0100
+++ b/src/mobility/wscript Tue Mar 10 14:27:58 2009 +0100
@@ -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',
]