src/node/random-walk-2d-mobility-model.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 19 Jul 2007 10:28:48 +0200
changeset 1624 6e7d48a8c120
parent 1619 82612ea8b2a7
child 1628 2edabd03c1e1
permissions -rw-r--r--
add MobilityModel::GetSpeed method and implement it in all mobility models
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"
1557
0e9a6c0c833c add some debugging output. initialize the time argument correctly.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1556
diff changeset
    27
#include "ns3/debug.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
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    30
NS_DEBUG_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",
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    44
        0, 0);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    45
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    46
static IntegerDefaultValue<double>
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
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    87
Ptr<RandomWalk2dMobilityModelParameters> 
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    88
RandomWalk2dMobilityModelParameters::GetCurrent (void)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    90
  static Ptr<RandomWalk2dMobilityModelParameters> parameters = 0;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    91
  if (parameters == 0 ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    92
      g_speed.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    93
      g_direction.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    94
      g_mode.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    95
      g_modeDistance.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    96
      g_modeTime.IsDirty () ||
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    97
      g_rectangle.IsDirty ())
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
    {
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
    99
      parameters = Create<RandomWalk2dMobilityModelParameters> ();
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
    }
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
  return parameters;
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   104
RandomWalk2dMobilityModel::RandomWalk2dMobilityModel ()
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   105
  : m_parameters (RandomWalk2dMobilityModelParameters::GetCurrent ())
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   107
  SetInterfaceId (RandomWalk2dMobilityModel::iid);
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   108
  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
   109
}
363325191f95 add cid/iid support to RandomWalk
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1557
diff changeset
   110
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   112
RandomWalk2dMobilityModel::Start (void)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   114
  double speed = m_parameters->m_speed->GetValue ();
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   115
  double direction = m_parameters->m_direction->GetValue ();
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   116
  Speed vector (std::cos (direction) * speed,
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   117
                std::sin (direction) * speed,
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   118
                0.0);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   119
  m_helper.Reset (vector);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   120
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   121
  Time delayLeft;
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   122
  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
   123
    {
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   124
      delayLeft = m_parameters->m_modeTime;
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
    }
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
  else
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
    {
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   128
      delayLeft = Seconds (m_parameters->m_modeDistance / speed); 
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
    }
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   130
  DoWalk (delayLeft);
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
}
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
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   134
RandomWalk2dMobilityModel::DoWalk (Time delayLeft)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
{
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   136
  Position position = m_helper.GetCurrentPosition ();
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   137
  Speed speed = m_helper.GetSpeed ();
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   138
  Position nextPosition = position;
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   139
  nextPosition.x += speed.dx * delayLeft.GetSeconds ();
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   140
  nextPosition.y += speed.dy * delayLeft.GetSeconds ();
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   141
  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
   142
    {
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   143
      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
   144
    }
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   145
  else
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   146
    {
1619
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   147
      nextPosition = m_parameters->m_bounds.CalculateIntersection (position, speed);
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   148
      Time delay = Seconds ((nextPosition.x - position.x) / speed.dx);
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   149
      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
   150
                                     delayLeft - delay);      
82612ea8b2a7 move delay calculation code from helper to random walk class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1618
diff changeset
   151
    }  
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   152
  NotifyCourseChange ();
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   155
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   156
RandomWalk2dMobilityModel::Rebound (Time delayLeft)
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   157
{
1618
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   158
  Position position = m_helper.GetCurrentPosition (m_parameters->m_bounds);
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   159
  Speed speed = m_helper.GetSpeed ();
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   160
  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
   161
    {
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   162
    case Rectangle::RIGHT:
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   163
    case Rectangle::LEFT:
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   164
      speed.dx = - speed.dx;
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   165
      break;
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   166
    case Rectangle::TOP:
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   167
    case Rectangle::BOTTOM:
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   168
      speed.dy = - speed.dy;
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   169
      break;
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   170
    }
35f814bf6e4b move rebound code from helper to random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1616
diff changeset
   171
  m_helper.Reset (speed);
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   172
  DoWalk (delayLeft);
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
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   175
void
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   176
RandomWalk2dMobilityModel::DoDispose (void)
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   177
{
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   178
  m_parameters = 0;
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   179
  // chain up
1579
a4187ed1e45e Position -> MobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1573
diff changeset
   180
  MobilityModel::DoDispose ();
1573
23f53613f22d implement Dispose
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1565
diff changeset
   181
}
1584
b612c5fe9e6b new version of DoGet and DoSet
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1580
diff changeset
   182
Position
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   183
RandomWalk2dMobilityModel::DoGet (void) const
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
{
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   185
  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
   186
}
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
void
1605
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   188
RandomWalk2dMobilityModel::DoSet (const Position &position)
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
{
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
   190
  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
   191
  m_helper.InitializePosition (position);
c1b6f76ab722 a real random walk model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1584
diff changeset
   192
  Simulator::Remove (m_event);
1615
170a6a711172 remove 'now' events
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1608
diff changeset
   193
  m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this);
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
}
1624
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   195
Speed 
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   196
RandomWalk2dMobilityModel::DoGetSpeed (void) const
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   197
{
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   198
  return m_helper.GetSpeed ();
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   199
}
6e7d48a8c120 add MobilityModel::GetSpeed method and implement it in all mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1619
diff changeset
   200
1553
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   201
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
09f32ecf07b9 random walk position model (untested)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
} // namespace ns3