bug 482: Add constant acceleration mobility model
authorGustavo J. A. M. Carneiro <gjcarneiro@gmail.com>
Tue, 10 Mar 2009 14:27:58 +0100
changeset 4259 e57ced8f6660
parent 4258 8b6b5fbc1976
child 4260 29587ce02a57
bug 482: Add constant acceleration mobility model
src/mobility/constant-acceleration-mobility-model.cc
src/mobility/constant-acceleration-mobility-model.h
src/mobility/wscript
--- /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',
         ]