00001 // Copyright 2008 Michael Marsh, University of Maryland. 00002 // 00003 // This file is part of pydtn. 00004 // 00005 // pydtn is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // pydtn is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with pydtn. If not, see <http://www.gnu.org/licenses/>. 00017 // 00018 // The views and conclusions contained in the software and documentation 00019 // are those of the authors and should not be interpreted as representing 00020 // official policies, either expressed or implied, of the University 00021 // of Maryland. 00022 // 00023 // pydtn extends and embeds the Python interpreter, which is 00024 // Copyright 2001-2006 Python Software Foundation, All Rights Reserved, 00025 // and is released under the PSF License Agreement. 00026 // 00027 // RANLUX random number generation uses the Boost library, 00028 // Copyright 1994-2006 by various authors (details in individual files), 00029 // which is released under the Boost Software License, Version 1.0. 00030 00031 #include "Position.h" 00032 #include <math.h> 00033 00034 using namespace Mobility; 00035 00036 double 00037 Position::length() const 00038 { 00039 return ::sqrt( m_x*m_x + m_y*m_y + m_z*m_z ); 00040 } 00041 00042 Position 00043 Position::operator+( const Position& p ) const 00044 { 00045 return Position( m_x+p.m_x , m_y+p.m_y , m_z+p.m_z ); 00046 } 00047 00048 Position 00049 Position::operator-( const Position& p ) const 00050 { 00051 return Position( m_x-p.m_x , m_y-p.m_y , m_z-p.m_z ); 00052 } 00053 00054 Position 00055 Position::operator*( double s ) const 00056 { 00057 return Position( s*m_x , s*m_y , s*m_z ); 00058 } 00059 00060 Position 00061 Position::operator/( double s ) const 00062 { 00063 return Position( m_x/s , m_y/s , m_z/s ); 00064 } 00065 00066 Position& 00067 Position::operator+=( const Position& p ) 00068 { 00069 m_x += p.m_x; 00070 m_y += p.m_y; 00071 m_z += p.m_z; 00072 return *this; 00073 } 00074 00075 Position& 00076 Position::operator-=( const Position& p ) 00077 { 00078 m_x -= p.m_x; 00079 m_y -= p.m_y; 00080 m_z -= p.m_z; 00081 return *this; 00082 } 00083 00084 Position& 00085 Position::operator*=( double s ) 00086 { 00087 m_x *= s; 00088 m_y *= s; 00089 m_z *= s; 00090 return *this; 00091 } 00092 00093 Position& 00094 Position::operator/=( double s ) 00095 { 00096 m_x /= s; 00097 m_y /= s; 00098 m_z /= s; 00099 return *this; 00100 } 00101 00102 void 00103 Position::operator=( const Position& p ) 00104 { 00105 if ( &p == this ) return; 00106 m_x = p.m_x; 00107 m_y = p.m_y; 00108 m_z = p.m_z; 00109 } 00110 00111 Position 00112 operator*( double s, const Position& p ) 00113 { 00114 return p * s; 00115 }
1.5.4