21 #include "ns3/simulator.h"
22 #include "ns3/double.h"
33 static TypeId tid =
TypeId (
"ns3::SteadyStateRandomWaypointMobilityModel")
35 .SetGroupName (
"Mobility")
37 .AddAttribute (
"MinSpeed",
38 "Minimum speed value, [m/s]",
41 MakeDoubleChecker<double> ())
42 .AddAttribute (
"MaxSpeed",
43 "Maximum speed value, [m/s]",
46 MakeDoubleChecker<double> ())
47 .AddAttribute (
"MinPause",
48 "Minimum pause value, [s]",
51 MakeDoubleChecker<double> ())
52 .AddAttribute (
"MaxPause",
53 "Maximum pause value, [s]",
56 MakeDoubleChecker<double> ())
57 .AddAttribute (
"MinX",
58 "Minimum X value of traveling region, [m]",
61 MakeDoubleChecker<double> ())
62 .AddAttribute (
"MaxX",
63 "Maximum X value of traveling region, [m]",
66 MakeDoubleChecker<double> ())
67 .AddAttribute (
"MinY",
68 "Minimum Y value of traveling region, [m]",
71 MakeDoubleChecker<double> ())
72 .AddAttribute (
"MaxY",
73 "Maximum Y value of traveling region, [m]",
76 MakeDoubleChecker<double> ())
78 "Z value of traveling region (fixed), [m]",
81 MakeDoubleChecker<double> ());
87 alreadyStarted (false)
89 m_speed = CreateObject<UniformRandomVariable> ();
90 m_pause = CreateObject<UniformRandomVariable> ();
91 m_x1_r = CreateObject<UniformRandomVariable> ();
92 m_y1_r = CreateObject<UniformRandomVariable> ();
93 m_x2_r = CreateObject<UniformRandomVariable> ();
94 m_y2_r = CreateObject<UniformRandomVariable> ();
95 m_u_r = CreateObject<UniformRandomVariable> ();
96 m_x = CreateObject<UniformRandomVariable> ();
97 m_y = CreateObject<UniformRandomVariable> ();
118 m_position = CreateObject<RandomRectanglePositionAllocator> ();
138 double log1 = b*b / a*std::log (std::sqrt ((a*a)/(b*b) + 1) + a/b);
139 double log2 = a*a / b*std::log (std::sqrt ((b*b)/(a*a) + 1) + b/a);
140 double expectedTravelTime = 1.0/6.0*(log1 + log2);
141 expectedTravelTime += 1.0/15.0*((a*a*a)/(b*b) + (b*b*b)/(a*a)) -
142 1.0/15.0*std::sqrt (a*a + b*b)*((a*a)/(b*b) + (b*b)/(a*a) - 3);
145 expectedTravelTime /= v0;
149 expectedTravelTime *= std::log (v1/v0)/(v1 - v0);
151 double probabilityPaused = expectedPauseTime/(expectedPauseTime + expectedTravelTime);
152 NS_ASSERT (probabilityPaused >= 0 && probabilityPaused <= 1);
155 if (u < probabilityPaused)
175 pause = Seconds (u*expectedPauseTime);
182 double x1, x2, y1, y2;
192 r = std::sqrt (((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))/(a*a + b*b));
215 double dx = (destination.
x - m_current.
x);
216 double dy = (destination.
y - m_current.
y);
217 double dz = (destination.
z - m_current.
z);
218 double k = speed / std::sqrt (dx*dx + dy*dy + dz*dz);
237 double dx = (destination.
x - m_current.
x);
238 double dy = (destination.
y - m_current.
y);
239 double dz = (destination.
z - m_current.
z);
240 double k = speed / std::sqrt (dx*dx + dy*dy + dz*dz);
284 int64_t positionStreamsAllocated = 0;
295 return (9 + positionStreamsAllocated);