src/node/static-speed-helper.cc
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--
move rebound code from helper to random walk model
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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