00001 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ 00002 /* 00003 * Copyright (c) 2007 INRIA 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License version 2 as 00007 * published by the Free Software Foundation; 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, write to the Free Software 00016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 * 00018 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> 00019 */ 00020 #ifndef VECTOR_H 00021 #define VECTOR_H 00022 00023 #include "ns3/attribute.h" 00024 #include "ns3/attribute-helper.h" 00025 00026 namespace ns3 { 00027 00028 /** 00029 * \brief a 3d cartesian position vector 00030 * 00031 * Unit is meters. 00032 */ 00033 class Vector 00034 { 00035 public: 00036 /** 00037 * \param _x x coordinate of vector vector 00038 * \param _y y coordinate of vector vector 00039 * \param _z z coordinate of vector vector 00040 * 00041 * Create vector vector (_x, _y, _z) 00042 */ 00043 Vector (double _x, double _y, double _z); 00044 /** 00045 * Create vector vector (0.0, 0.0, 0.0) 00046 */ 00047 Vector (); 00048 /** 00049 * x coordinate of vector vector 00050 */ 00051 double x; 00052 /** 00053 * y coordinate of vector vector 00054 */ 00055 double y; 00056 /** 00057 * z coordinate of vector vector 00058 */ 00059 double z; 00060 }; 00061 00062 /** 00063 * \param a one point 00064 * \param b another point 00065 * \returns the cartesian distance between a and b. 00066 */ 00067 double CalculateDistance (const Vector &a, const Vector &b); 00068 00069 /** 00070 * \class ns3::VectorValue 00071 * \brief hold objects of type ns3::Vector 00072 */ 00073 00074 ATTRIBUTE_HELPER_HEADER (Vector); 00075 00076 std::ostream &operator << (std::ostream &os, const Vector &vector); 00077 std::istream &operator >> (std::istream &is, Vector &vector); 00078 00079 } // namespace ns3 00080 00081 #endif /* VECTOR_H */