src/mobility/random-walk-2d-mobility-model.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 02 Jan 2008 09:09:24 +0100
changeset 2230 9f13ac3291e0
parent 1818 fbdc8361dc77
child 2232 9abd038ee588
permissions -rw-r--r--
add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
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
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    34
const ClassId RandomWalk2dMobilityModel::cid = 
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    35
  MakeClassId<RandomWalk2dMobilityModel> ("RandomWalk2dMobilityModel", RandomWalk2dMobilityModel::iid);
1563
363325191f95 add cid/iid support to RandomWalk
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1557
diff changeset
    36
363325191f95 add cid/iid support to RandomWalk
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1557
diff changeset
    37
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    38
static EnumDefaultValue<RandomWalk2dMobilityModelParameters::Mode> 
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    39
g_mode ("RandomWalk2dMode",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    40
        "The mode indicates the condition used to "
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    41
        "change the current speed and direction",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    42
        RandomWalk2dMobilityModelParameters::MODE_DISTANCE, "Distance",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    43
        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
    44
        0, (void*)0);
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    45
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
    46
static NumericDefaultValue<double>
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    47
g_modeDistance ("RandomWalk2dDistance",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    48
                "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
    49
                2.0);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    50
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    51
static TimeDefaultValue
1608
b08dcbbca8c6 be consistant with the rest of the code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1605
diff changeset
    52
g_modeTime ("RandomWalk2dTime",
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    53
             "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
    54
             Seconds (1.0));
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    56
static RandomVariableDefaultValue
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    57
g_speed ("RandomWalk2dSpeed",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    58
         "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
    59
         "Uniform:2:4");
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    60
static RandomVariableDefaultValue
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    61
g_direction ("RandomWalk2dDirection",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    62
             "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
    63
             "Uniform:0.0:6.283184");
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    64
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    65
static RectangleDefaultValue
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    66
g_rectangle ("RandomWalk2dBounds",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    67
             "Bounds of the area to cruise.",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    68
             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
    69
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    70
RandomWalk2dMobilityModelParameters::RandomWalk2dMobilityModelParameters ()
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    71
  : m_mode (g_mode.GetValue ()),
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
    m_modeDistance (g_modeDistance.GetValue ()),
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    73
    m_modeTime (g_modeTime.GetValue ()),
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    74
    m_speed (g_speed.GetCopy ()),
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    75
    m_direction (g_direction.GetCopy ()),
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    76
    m_bounds (g_rectangle.GetValue ())
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
{}
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    78
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    79
RandomWalk2dMobilityModelParameters::~RandomWalk2dMobilityModelParameters ()
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    81
  delete m_speed;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    82
  delete m_direction;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    83
  m_speed = 0;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    84
  m_direction = 0;
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
1628
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    87
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    88
RandomWalk2dMobilityModelParameters::SetSpeed (const RandomVariable &speed)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    89
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    90
  delete m_speed;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    91
  m_speed = speed.Copy ();
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    92
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    93
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    94
RandomWalk2dMobilityModelParameters::SetDirection (const RandomVariable &direction)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    95
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    96
  delete m_direction;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    97
  m_direction = direction.Copy ();
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    98
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
    99
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   100
RandomWalk2dMobilityModelParameters::SetModeDistance (double distance)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   101
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   102
  m_mode = RandomWalk2dMobilityModelParameters::MODE_DISTANCE;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   103
  m_modeDistance = distance;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   104
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   105
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   106
RandomWalk2dMobilityModelParameters::SetModeTime (Time time)
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   107
{
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   108
  m_mode = RandomWalk2dMobilityModelParameters::MODE_TIME;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   109
  m_modeTime = time;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   110
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   111
void 
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   112
RandomWalk2dMobilityModelParameters::SetBounds (const Rectangle &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
  m_bounds = bounds;
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   115
}
2edabd03c1e1 doxygen for mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1624
diff changeset
   116
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   117
Ptr<RandomWalk2dMobilityModelParameters> 
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   118
RandomWalk2dMobilityModelParameters::GetCurrent (void)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   120
  static Ptr<RandomWalk2dMobilityModelParameters> parameters = 0;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   121
  if (parameters == 0 ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   122
      g_speed.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   123
      g_direction.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   124
      g_mode.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   125
      g_modeDistance.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   126
      g_modeTime.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   127
      g_rectangle.IsDirty ())
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
    {
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
   129
      parameters = CreateObject<RandomWalk2dMobilityModelParameters> ();
1553
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
  return parameters;
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   134
RandomWalk2dMobilityModel::RandomWalk2dMobilityModel ()
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   135
  : m_parameters (RandomWalk2dMobilityModelParameters::GetCurrent ())
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
{
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   137
  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
   138
}
363325191f95 add cid/iid support to RandomWalk
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1557
diff changeset
   139
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   141
RandomWalk2dMobilityModel::Start (void)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   143
  double speed = m_parameters->m_speed->GetValue ();
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   144
  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
   145
  Vector vector (std::cos (direction) * speed,
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   146
                 std::sin (direction) * speed,
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   147
                 0.0);
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   148
  m_helper.Reset (vector);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   149
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   150
  Time delayLeft;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   151
  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
   152
    {
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   153
      delayLeft = m_parameters->m_modeTime;
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
    }
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
  else
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
      delayLeft = Seconds (m_parameters->m_modeDistance / speed); 
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
    }
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   159
  DoWalk (delayLeft);
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   163
RandomWalk2dMobilityModel::DoWalk (Time delayLeft)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
{
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   165
  Vector position = m_helper.GetCurrentPosition ();
1818
fbdc8361dc77 GetSpeed -> GetVelocity
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1817
diff changeset
   166
  Vector speed = m_helper.GetVelocity ();
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   167
  Vector nextPosition = position;
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   168
  nextPosition.x += speed.x * delayLeft.GetSeconds ();
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   169
  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
   170
  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
   171
    {
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   172
      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
   173
    }
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   174
  else
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   175
    {
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   176
      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
   177
      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
   178
      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
   179
                                     delayLeft - delay);      
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   180
    }  
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   181
  NotifyCourseChange ();
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   184
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   185
RandomWalk2dMobilityModel::Rebound (Time delayLeft)
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   186
{
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   187
  Vector position = m_helper.GetCurrentPosition (m_parameters->m_bounds);
1818
fbdc8361dc77 GetSpeed -> GetVelocity
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1817
diff changeset
   188
  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
   189
  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
   190
    {
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   191
    case Rectangle::RIGHT:
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   192
    case Rectangle::LEFT:
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   193
      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
   194
      break;
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   195
    case Rectangle::TOP:
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   196
    case Rectangle::BOTTOM:
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   197
      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
   198
      break;
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   199
    }
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   200
  m_helper.Reset (speed);
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   201
  DoWalk (delayLeft);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   202
}
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   203
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   204
void
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   205
RandomWalk2dMobilityModel::DoDispose (void)
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   206
{
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   207
  m_parameters = 0;
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   208
  // chain up
1579
a4187ed1e45e Position -> MobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1573
diff changeset
   209
  MobilityModel::DoDispose ();
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   210
}
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   211
Vector
1816
d7c9b9da78f4 rename MobilityModel::Get/Set to GetPosition/SetPosition
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1804
diff changeset
   212
RandomWalk2dMobilityModel::DoGetPosition (void) const
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   214
  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
   215
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
void
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   217
RandomWalk2dMobilityModel::DoSetPosition (const Vector &position)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
{
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
   219
  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
   220
  m_helper.InitializePosition (position);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   221
  Simulator::Remove (m_event);
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   222
  m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this);
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
}
1817
8b0520433350 replace Position and Speed by Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1816
diff changeset
   224
Vector
1818
fbdc8361dc77 GetSpeed -> GetVelocity
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1817
diff changeset
   225
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
   226
{
1818
fbdc8361dc77 GetSpeed -> GetVelocity
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1817
diff changeset
   227
  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
   228
}
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   229
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
} // namespace ns3