src/core/model/vector.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Wed, 07 Jan 2015 15:43:53 -0800
changeset 11136 03bf8fa63bda
parent 10968 2d29fee2b7b8
child 11141 555cc8046e67
permissions -rw-r--r--
[Doxygen] Files implementing attributes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7383
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
1460
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     2
/*
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     3
 * Copyright (c) 2007 INRIA
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     4
 *
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     7
 * published by the Free Software Foundation;
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     8
 *
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    12
 * GNU General Public License for more details.
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    13
 *
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    14
 * You should have received a copy of the GNU General Public License
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    15
 * along with this program; if not, write to the Free Software
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    17
 *
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
0c9be520ba9f fix copyright statements
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 968
diff changeset
    19
 */
1815
be6c04bc96ef a vector class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1460
diff changeset
    20
#include "vector.h"
7383
c5e131450339 remove ns3/ prefix which is un-needed now that all files are in same module.
Mathieu Lacage <mathieu.lacage@gmail.com>
parents: 7169
diff changeset
    21
#include "fatal-error.h"
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    22
#include "log.h"
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include <cmath>
2387
a74c89d71cba add Value support to Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1815
diff changeset
    24
#include <sstream>
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
11136
03bf8fa63bda [Doxygen] Files implementing attributes.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10968
diff changeset
    26
/**
03bf8fa63bda [Doxygen] Files implementing attributes.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10968
diff changeset
    27
 * \file
03bf8fa63bda [Doxygen] Files implementing attributes.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10968
diff changeset
    28
 * \ingroup attribute_Vector
03bf8fa63bda [Doxygen] Files implementing attributes.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10968
diff changeset
    29
 * ns3::Vector, ns3::Vector2D and ns3::Vector3D attribute value implementations.
03bf8fa63bda [Doxygen] Files implementing attributes.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10968
diff changeset
    30
 */
03bf8fa63bda [Doxygen] Files implementing attributes.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10968
diff changeset
    31
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9191
diff changeset
    32
namespace ns3 {
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    33
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9191
diff changeset
    34
NS_LOG_COMPONENT_DEFINE ("Vector");
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    36
ATTRIBUTE_HELPER_CPP (Vector3D);
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    37
ATTRIBUTE_HELPER_CPP (Vector2D);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    38
// compatibility for mobility code
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    39
Ptr<const AttributeChecker> MakeVectorChecker (void)
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    40
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    41
  NS_LOG_FUNCTION_NOARGS ();
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    42
  return MakeVector3DChecker ();
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    43
}
2422
6cbcb8fe4551 macro-ify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2409
diff changeset
    44
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    46
Vector3D::Vector3D (double _x, double _y, double _z)
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
  : x (_x),
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
    y (_y),
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
    z (_z)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    50
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    51
  NS_LOG_FUNCTION (this << _x << _y << _z);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    52
}
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    54
Vector3D::Vector3D ()
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
  : x (0.0),
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
    y (0.0),
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
    z (0.0)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    58
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    59
  NS_LOG_FUNCTION (this);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    60
}
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    62
Vector2D::Vector2D (double _x, double _y)
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    63
  : x (_x),
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    64
    y (_y)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    65
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    66
  NS_LOG_FUNCTION (this << _x << _y);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    67
}
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    68
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    69
Vector2D::Vector2D ()
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    70
  : x (0.0),
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    71
    y (0.0)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    72
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    73
  NS_LOG_FUNCTION (this);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    74
}
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    75
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    76
double
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    77
CalculateDistance (const Vector3D &a, const Vector3D &b)
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    79
  NS_LOG_FUNCTION (a << b);
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
  double dx = b.x - a.x;
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
  double dy = b.y - a.y;
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
  double dz = b.z - a.z;
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
  double distance = std::sqrt (dx * dx + dy * dy + dz * dz);
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
  return distance;
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
}
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    86
double 
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    87
CalculateDistance (const Vector2D &a, const Vector2D &b)
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    88
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 7385
diff changeset
    89
  NS_LOG_FUNCTION (a << b);
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    90
  double dx = b.x - a.x;
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    91
  double dy = b.y - a.y;
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    92
  double distance = std::sqrt (dx * dx + dy * dy);
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    93
  return distance;
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    94
}
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
    96
std::ostream &operator << (std::ostream &os, const Vector3D &vector)
2409
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
    97
{
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
    98
  os << vector.x << ":" << vector.y << ":" << vector.z;
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
    99
  return os;
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   100
}
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   101
std::istream &operator >> (std::istream &is, Vector3D &vector)
2387
a74c89d71cba add Value support to Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1815
diff changeset
   102
{
2409
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   103
  char c1, c2;
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   104
  is >> vector.x >> c1 >> vector.y >> c2 >> vector.z;
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   105
  if (c1 != ':' ||
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   106
      c2 != ':')
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   107
    {
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   108
      is.setstate (std::ios_base::failbit);
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   109
    }
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2387
diff changeset
   110
  return is;
2387
a74c89d71cba add Value support to Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1815
diff changeset
   111
}
4718
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   112
std::ostream &operator << (std::ostream &os, const Vector2D &vector)
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   113
{
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   114
  os << vector.x << ":" << vector.y;
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   115
  return os;
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   116
}
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   117
std::istream &operator >> (std::istream &is, Vector2D &vector)
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   118
{
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   119
  char c1;
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   120
  is >> vector.x >> c1 >> vector.y;
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   121
  if (c1 != ':')
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   122
    {
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   123
      is.setstate (std::ios_base::failbit);
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   124
    }
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   125
  return is;
7138f037be1f introduce Vector2D and Vector3D
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   126
}
2387
a74c89d71cba add Value support to Vector
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1815
diff changeset
   127
968
70d02500c9d5 mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
} // namespace ns3