diff --git a/src/core/model/vector.cc b/src/core/model/vector.cc index 66b12200b..f651f44b7 100644 --- a/src/core/model/vector.cc +++ b/src/core/model/vector.cc @@ -47,6 +47,68 @@ Vector3D::Vector3D () { } +double +Vector3D::GetLength () const +{ + return sqrt (x*x + y*y + z*z); +} + +Vector3D& +Vector3D::operator += (const Vector3D &v) +{ + x += v.x; + y += v.y; + z += v.z; + + return *this; +} + +Vector3D& +Vector3D::operator += (double v) +{ + x += v; + y += v; + z += v; + + return *this; +} + +Vector3D +Vector3D::operator + (const Vector3D &v) const +{ + return Vector3D (x+v.x, y+v.y, z+v.z); +} + +Vector3D +Vector3D::operator + (double v) const +{ + return Vector3D (x+v, y+v, z+v); +} + +Vector3D +Vector3D::operator * (const Vector3D &v) const +{ + return Vector3D (x*v.x, y*v.y, z*v.z); +} + +Vector3D +Vector3D::operator * (double v) const +{ + return Vector3D (x*v, y*v, z*v); +} + +Vector3D +Vector3D::operator - (const Vector3D &v) const +{ + return Vector3D (x-v.x, y-v.y, z-v.z); +} + +Vector3D +Vector3D::operator / (double div) const +{ + return Vector3D (x/div, y/div, z/div); +} + Vector2D::Vector2D (double _x, double _y) : x (_x), y (_y) @@ -59,6 +121,66 @@ Vector2D::Vector2D () { } +double +Vector2D::GetLength () const +{ + return sqrt (x*x + y*y); +} + +Vector2D& +Vector2D::operator += (const Vector2D &v) +{ + x += v.x; + y += v.y; + + return *this; +} + +Vector2D& +Vector2D::operator += (double v) +{ + x += v; + y += v; + + return *this; +} + +Vector2D +Vector2D::operator + (const Vector2D &v) const +{ + return Vector2D (x+v.x, y+v.y); +} + +Vector2D +Vector2D::operator + (double v) const +{ + return Vector2D (x+v, y+v); +} + +Vector2D +Vector2D::operator * (const Vector2D &v) const +{ + return Vector2D (x*v.x, y*v.y); +} + +Vector2D +Vector2D::operator * (double v) const +{ + return Vector2D (x*v, y*v); +} + +Vector2D +Vector2D::operator - (const Vector2D &v) const +{ + return Vector2D (x-v.x, y-v.y); +} + +Vector2D +Vector2D::operator / (double div) const +{ + return Vector2D (x/div, y/div); +} + double CalculateDistance (const Vector3D &a, const Vector3D &b) { @@ -77,6 +199,21 @@ CalculateDistance (const Vector2D &a, const Vector2D &b) return distance; } + +double +ScalarMultiplication (const Vector3D &a, const Vector3D &b) +{ + Vector3D tmp = a * b; + return tmp.x + tmp.y + tmp.z; +} + +double +ScalarMultiplication (const Vector2D &a, const Vector2D &b) +{ + Vector2D tmp = a * b; + return tmp.x + tmp.y; +} + std::ostream &operator << (std::ostream &os, const Vector3D &vector) { os << vector.x << ":" << vector.y << ":" << vector.z; diff --git a/src/core/model/vector.h b/src/core/model/vector.h index eaf081916..00e805341 100644 --- a/src/core/model/vector.h +++ b/src/core/model/vector.h @@ -55,6 +55,17 @@ public: * z coordinate of vector */ double z; + + double GetLength () const; + + Vector3D& operator += (const Vector3D &); + Vector3D& operator += (double); + Vector3D operator + (const Vector3D &) const; + Vector3D operator + (double) const; + Vector3D operator * (const Vector3D &) const; + Vector3D operator * (double v) const; + Vector3D operator - (const Vector3D &) const; + Vector3D operator / (double) const; }; /** @@ -82,6 +93,17 @@ public: * y coordinate of vector */ double y; + + double GetLength () const; + + Vector2D& operator += (const Vector2D &); + Vector2D& operator += (double); + Vector2D operator + (const Vector2D &) const; + Vector2D operator + (double) const; + Vector2D operator * (const Vector2D &) const; + Vector2D operator * (double v) const; + Vector2D operator - (const Vector2D &) const; + Vector2D operator / (double) const; }; /** @@ -98,6 +120,19 @@ double CalculateDistance (const Vector3D &a, const Vector3D &b); */ double CalculateDistance (const Vector2D &a, const Vector2D &b); +/** + * \brief Calculate scalar multiplication between two vectors + * \param a one point + * \param b another point + */ +double ScalarMultiplication (const Vector3D &a, const Vector3D &b); +/** + * \brief Calculate scalar multiplication between two vectors + * \param a one point + * \param b another point + */ +double ScalarMultiplication (const Vector2D &a, const Vector2D &b); + /** * \class ns3::Vector3DValue * \brief hold objects of type ns3::Vector3D