author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Thu, 19 Jul 2007 09:54:57 +0200 | |
changeset 1618 | 35f814bf6e4b |
parent 1617 | 2d44f6e53b3c |
child 1619 | 82612ea8b2a7 |
permissions | -rw-r--r-- |
1591
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1 |
#include "ns3/simulator.h" |
1605
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
2 |
#include "ns3/rectangle.h" |
1600
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
3 |
#include "static-speed-helper.h" |
1591
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
|
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
namespace ns3 { |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
|
1600
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
7 |
StaticSpeedHelper::StaticSpeedHelper () |
1591
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
{} |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
void |
1600
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
10 |
StaticSpeedHelper::InitializePosition (const Position &position) |
1591
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
{ |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
m_position = position; |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
m_speed.dx = 0.0; |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
m_speed.dy = 0.0; |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
m_lastUpdate = Simulator::Now (); |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
m_pauseEnd = Simulator::Now (); |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
} |
1600
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
18 |
|
1591
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
void |
1600
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
20 |
StaticSpeedHelper::Reset (const Speed &speed, const Time &pauseDelay) |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
21 |
{ |
1605
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
22 |
Reset (speed); |
1600
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
23 |
m_pauseEnd = Simulator::Now () + pauseDelay; |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
24 |
} |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
25 |
|
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
26 |
Position |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
27 |
StaticSpeedHelper::GetCurrentPosition (void) const |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
28 |
{ |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
29 |
Update (); |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
30 |
return m_position; |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
31 |
} |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
32 |
|
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
33 |
Speed |
1618
35f814bf6e4b
move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1617
diff
changeset
|
34 |
StaticSpeedHelper::GetSpeed (void) const |
1600
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
35 |
{ |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
36 |
return m_speed; |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
37 |
} |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
38 |
|
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
39 |
void |
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
40 |
StaticSpeedHelper::Update (void) const |
1591
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
{ |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
42 |
Time now = Simulator::Now (); |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
if (m_pauseEnd > now) |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
44 |
{ |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
45 |
return; |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
46 |
} |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
Time last = std::max (now, m_pauseEnd); |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
if (m_lastUpdate >= last) |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
{ |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
50 |
return; |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
51 |
} |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
52 |
Time deltaTime = now - last; |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
53 |
m_lastUpdate = now; |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
54 |
double deltaS = deltaTime.GetSeconds (); |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
55 |
m_position.x += m_speed.dx * deltaS; |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
56 |
m_position.y += m_speed.dy * deltaS; |
1600
1a1101c83922
add a 3d random waypoint model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1591
diff
changeset
|
57 |
m_position.z += m_speed.dz * deltaS; |
1591
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
58 |
} |
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
59 |
|
1605
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
60 |
void |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
61 |
StaticSpeedHelper::Reset (const Speed &speed) |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
62 |
{ |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
63 |
Update (); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
64 |
m_speed = speed; |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
65 |
m_pauseEnd = Simulator::Now (); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
66 |
} |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
67 |
Time |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
68 |
StaticSpeedHelper::GetDelayToNextPosition (const Rectangle &bounds, Time delayLeft) |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
69 |
{ |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
70 |
UpdateFull (bounds); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
71 |
Position nextPosition = m_position; |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
72 |
nextPosition.x += m_speed.dx * delayLeft.GetSeconds (); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
73 |
nextPosition.y += m_speed.dy * delayLeft.GetSeconds (); |
1616
897d26dfba35
move around rectangle class and move IsInside method from Position to Rectangle
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1605
diff
changeset
|
74 |
if (bounds.IsInside (nextPosition)) |
1605
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
75 |
{ |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
76 |
return delayLeft; |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
77 |
} |
1617
2d44f6e53b3c
move intersection code to rectangle class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1616
diff
changeset
|
78 |
|
2d44f6e53b3c
move intersection code to rectangle class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1616
diff
changeset
|
79 |
nextPosition = bounds.CalculateIntersection (m_position, m_speed); |
1605
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
80 |
Time delay = Seconds ((nextPosition.x - m_position.x) / m_speed.dx); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
81 |
return delay; |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
82 |
} |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
83 |
|
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
84 |
void |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
85 |
StaticSpeedHelper::UpdateFull (const Rectangle &bounds) const |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
86 |
{ |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
87 |
Update (); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
88 |
m_position.x = std::min (bounds.xMax, m_position.x); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
89 |
m_position.x = std::max (bounds.xMin, m_position.x); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
90 |
m_position.y = std::min (bounds.yMax, m_position.y); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
91 |
m_position.y = std::max (bounds.yMin, m_position.y); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
92 |
} |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
93 |
|
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
94 |
Position |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
95 |
StaticSpeedHelper::GetCurrentPosition (const Rectangle &bounds) const |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
96 |
{ |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
97 |
UpdateFull (bounds); |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
98 |
return m_position; |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
99 |
} |
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
100 |
|
c1b6f76ab722
a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1600
diff
changeset
|
101 |
|
1591
4a1f822fe9aa
split useful code out of random direction mobility model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
102 |
} // namespace ns3 |