src/mobility/random-walk-2d-mobility-model.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Tue, 15 Jan 2008 12:44:09 +0100
changeset 2252 80595448707a
parent 2251 04963d8cca51
child 2336 28ce210b91bb
permissions -rw-r--r--
iid -> tid
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2006,2007 INRIA
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    21
#include "random-walk-2d-mobility-model.h"
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "ns3/default-value.h"
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "ns3/time-default-value.h"
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    24
#include "ns3/rectangle-default-value.h"
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    25
#include "ns3/random-variable-default-value.h"
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include "ns3/simulator.h"
1804
9c11e776f501 bug 96: debug.h duplicates functionality from log.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1644
diff changeset
    27
#include "ns3/log.h"
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
#include <cmath>
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
1804
9c11e776f501 bug 96: debug.h duplicates functionality from log.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1644
diff changeset
    30
NS_LOG_COMPONENT_DEFINE ("RandomWalk2d");
1557
0e9a6c0c833c add some debugging output. initialize the time argument correctly.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1556
diff changeset
    31
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
namespace ns3 {
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
    34
NS_OBJECT_ENSURE_REGISTERED (RandomWalk2dMobilityModel);
1563
363325191f95 add cid/iid support to RandomWalk
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1557
diff changeset
    35
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    36
static EnumDefaultValue<RandomWalk2dMobilityModelParameters::Mode> 
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    37
g_mode ("RandomWalk2dMode",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    38
        "The mode indicates the condition used to "
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    39
        "change the current speed and direction",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    40
        RandomWalk2dMobilityModelParameters::MODE_DISTANCE, "Distance",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    41
        RandomWalk2dMobilityModelParameters::MODE_TIME, "Time",
1644
fcc5b3d4998c Fix the enumeration value list end marker (0 and (void*)0 are very different things in amd64)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1637
diff changeset
    42
        0, (void*)0);
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    43
1644
fcc5b3d4998c Fix the enumeration value list end marker (0 and (void*)0 are very different things in amd64)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1637
diff changeset
    44
static NumericDefaultValue<double>
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    45
g_modeDistance ("RandomWalk2dDistance",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    46
                "Change current direction and speed after moving this distance.",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    47
                2.0);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    48
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    49
static TimeDefaultValue
1608
b08dcbbca8c6 be consistant with the rest of the code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1605
diff changeset
    50
g_modeTime ("RandomWalk2dTime",
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    51
             "Change current direction and speed after moving for this delay.",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    52
             Seconds (1.0));
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    54
static RandomVariableDefaultValue
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    55
g_speed ("RandomWalk2dSpeed",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    56
         "A random variable used to pick the speed.",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    57
         "Uniform:2:4");
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    58
static RandomVariableDefaultValue
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    59
g_direction ("RandomWalk2dDirection",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    60
             "A random variable used to pick the direction (gradients).",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    61
             "Uniform:0.0:6.283184");
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    62
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    63
static RectangleDefaultValue
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    64
g_rectangle ("RandomWalk2dBounds",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    65
             "Bounds of the area to cruise.",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    66
             0.0, 0.0, 100.0, 100.0);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    67
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    68
RandomWalk2dMobilityModelParameters::RandomWalk2dMobilityModelParameters ()
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    69
  : m_mode (g_mode.GetValue ()),
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
    m_modeDistance (g_modeDistance.GetValue ()),
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    71
    m_modeTime (g_modeTime.GetValue ()),
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    72
    m_speed (g_speed.GetCopy ()),
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    73
    m_direction (g_direction.GetCopy ()),
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    74
    m_bounds (g_rectangle.GetValue ())
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
{}
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    76
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    77
RandomWalk2dMobilityModelParameters::~RandomWalk2dMobilityModelParameters ()
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    79
  delete m_speed;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    80
  delete m_direction;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    81
  m_speed = 0;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    82
  m_direction = 0;
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
1628
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    85
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    86
RandomWalk2dMobilityModelParameters::SetSpeed (const RandomVariable &speed)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    87
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    88
  delete m_speed;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    89
  m_speed = speed.Copy ();
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    90
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    91
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    92
RandomWalk2dMobilityModelParameters::SetDirection (const RandomVariable &direction)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    93
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    94
  delete m_direction;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    95
  m_direction = direction.Copy ();
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    96
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    97
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    98
RandomWalk2dMobilityModelParameters::SetModeDistance (double distance)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    99
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   100
  m_mode = RandomWalk2dMobilityModelParameters::MODE_DISTANCE;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   101
  m_modeDistance = distance;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   102
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   103
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   104
RandomWalk2dMobilityModelParameters::SetModeTime (Time time)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   105
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   106
  m_mode = RandomWalk2dMobilityModelParameters::MODE_TIME;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   107
  m_modeTime = time;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   108
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   109
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   110
RandomWalk2dMobilityModelParameters::SetBounds (const Rectangle &bounds)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   111
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   112
  m_bounds = bounds;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   113
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   114
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   115
Ptr<RandomWalk2dMobilityModelParameters> 
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   116
RandomWalk2dMobilityModelParameters::GetCurrent (void)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   118
  static Ptr<RandomWalk2dMobilityModelParameters> parameters = 0;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   119
  if (parameters == 0 ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   120
      g_speed.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   121
      g_direction.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   122
      g_mode.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   123
      g_modeDistance.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   124
      g_modeTime.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   125
      g_rectangle.IsDirty ())
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
    {
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1818
diff changeset
   127
      parameters = CreateObject<RandomWalk2dMobilityModelParameters> ();
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
    }
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
  return parameters;
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
2250
18f432098389 InterfaceId -> TypeId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2249
diff changeset
   132
TypeId
2251
04963d8cca51 iid (void) -> GetTypeId (void)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2250
diff changeset
   133
RandomWalk2dMobilityModel::GetTypeId (void)
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   134
{
2252
80595448707a iid -> tid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2251
diff changeset
   135
  static TypeId tid = TypeId ("RandomWalkMobilityModel")
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   136
    .SetParent<MobilityModel> ()
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   137
    .AddConstructor<RandomWalk2dMobilityModel> ()
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   138
    .AddConstructor<RandomWalk2dMobilityModel,Ptr<RandomWalk2dMobilityModelParameters> > ();
2252
80595448707a iid -> tid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2251
diff changeset
   139
  return tid;
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   140
}
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   141
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   142
RandomWalk2dMobilityModel::RandomWalk2dMobilityModel ()
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   143
  : m_parameters (RandomWalk2dMobilityModelParameters::GetCurrent ())
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
{
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   145
  m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this);
1563
363325191f95 add cid/iid support to RandomWalk
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1557
diff changeset
   146
}
363325191f95 add cid/iid support to RandomWalk
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1557
diff changeset
   147
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   148
RandomWalk2dMobilityModel::RandomWalk2dMobilityModel (Ptr<RandomWalk2dMobilityModelParameters> parameters)
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   149
  : m_parameters (parameters)
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   150
{
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   151
  m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this);
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   152
}
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   153
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   155
RandomWalk2dMobilityModel::Start (void)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   157
  double speed = m_parameters->m_speed->GetValue ();
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   158
  double direction = m_parameters->m_direction->GetValue ();
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   159
  Vector vector (std::cos (direction) * speed,
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   160
                 std::sin (direction) * speed,
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   161
                 0.0);
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   162
  m_helper.Reset (vector);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   163
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   164
  Time delayLeft;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   165
  if (m_parameters->m_mode == RandomWalk2dMobilityModelParameters::MODE_TIME)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
    {
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   167
      delayLeft = m_parameters->m_modeTime;
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
    }
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
  else
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
    {
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   171
      delayLeft = Seconds (m_parameters->m_modeDistance / speed); 
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
    }
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   173
  DoWalk (delayLeft);
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   176
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   177
RandomWalk2dMobilityModel::DoWalk (Time delayLeft)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   178
{
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   179
  Vector position = m_helper.GetCurrentPosition ();
1818
fbdc8361dc77 GetSpeed -> GetVelocity
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1817
diff changeset
   180
  Vector speed = m_helper.GetVelocity ();
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   181
  Vector nextPosition = position;
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   182
  nextPosition.x += speed.x * delayLeft.GetSeconds ();
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   183
  nextPosition.y += speed.y * delayLeft.GetSeconds ();
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   184
  if (m_parameters->m_bounds.IsInside (nextPosition))
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   185
    {
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   186
      m_event = Simulator::Schedule (delayLeft, &RandomWalk2dMobilityModel::Start, this);
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   187
    }
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   188
  else
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   189
    {
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   190
      nextPosition = m_parameters->m_bounds.CalculateIntersection (position, speed);
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   191
      Time delay = Seconds ((nextPosition.x - position.x) / speed.x);
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   192
      m_event = Simulator::Schedule (delay, &RandomWalk2dMobilityModel::Rebound, this,
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   193
                                     delayLeft - delay);      
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   194
    }  
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   195
  NotifyCourseChange ();
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   198
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   199
RandomWalk2dMobilityModel::Rebound (Time delayLeft)
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   200
{
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   201
  Vector position = m_helper.GetCurrentPosition (m_parameters->m_bounds);
1818
fbdc8361dc77 GetSpeed -> GetVelocity
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1817
diff changeset
   202
  Vector speed = m_helper.GetVelocity ();
1618
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   203
  switch (m_parameters->m_bounds.GetClosestSide (position))
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   204
    {
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   205
    case Rectangle::RIGHT:
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   206
    case Rectangle::LEFT:
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   207
      speed.x = - speed.x;
1618
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   208
      break;
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   209
    case Rectangle::TOP:
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   210
    case Rectangle::BOTTOM:
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   211
      speed.y = - speed.y;
1618
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   212
      break;
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   213
    }
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   214
  m_helper.Reset (speed);
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   215
  DoWalk (delayLeft);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   216
}
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   217
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   218
void
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   219
RandomWalk2dMobilityModel::DoDispose (void)
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   220
{
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   221
  m_parameters = 0;
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   222
  // chain up
1579
a4187ed1e45e Position -> MobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1573
diff changeset
   223
  MobilityModel::DoDispose ();
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   224
}
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   225
Vector
1816
d7c9b9da78f4 rename MobilityModel::Get/Set to GetPosition/SetPosition
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1804
diff changeset
   226
RandomWalk2dMobilityModel::DoGetPosition (void) const
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   228
  return m_helper.GetCurrentPosition (m_parameters->m_bounds);
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
void
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   231
RandomWalk2dMobilityModel::DoSetPosition (const Vector &position)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
{
1616
897d26dfba35 move around rectangle class and move IsInside method from Position to Rectangle
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1615
diff changeset
   233
  NS_ASSERT (m_parameters->m_bounds.IsInside (position));
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   234
  m_helper.InitializePosition (position);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   235
  Simulator::Remove (m_event);
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   236
  m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this);
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
}
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   238
Vector
1818
fbdc8361dc77 GetSpeed -> GetVelocity
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1817
diff changeset
   239
RandomWalk2dMobilityModel::DoGetVelocity (void) const
1624
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   240
{
1818
fbdc8361dc77 GetSpeed -> GetVelocity
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1817
diff changeset
   241
  return m_helper.GetVelocity ();
1624
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   242
}
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   243
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
} // namespace ns3