Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | Related Pages

Coord.h

00001 /***************************************************************************
00002  * file:        Coord.h
00003  *
00004  * author:      Christian Frank
00005  *
00006  * copyright:   (C) 2004 Telecommunication Networks Group (TKN) at
00007  *              Technische Universitaet Berlin, Germany.
00008  *
00009  *              This program is free software; you can redistribute it
00010  *              and/or modify it under the terms of the GNU General Public
00011  *              License as published by the Free Software Foundation; either
00012  *              version 2 of the License, or (at your option) any later
00013  *              version.
00014  *              For further information see file COPYING
00015  *              in the top level directory
00016  ***************************************************************************
00017  * part of:     framework implementation developed by tkn
00018  **************************************************************************/
00019 
00020 
00021 #ifndef _COORD_H
00022 #define _COORD_H
00023 
00024 #include <omnetpp.h>
00025 #include "FWMath.h"
00026 
00037 class Coord : public cPolymorphic
00038 {
00039  public:
00041     double x,y;
00042 
00044     Coord(double _x=0, double _y=0) : x(_x), y(_y) {};
00045 
00046 
00048     Coord( const Coord& pos ) {
00049         x=pos.x;
00050         y=pos.y;
00051     }
00052 
00054     Coord( const Coord* pos ) {
00055         x=pos->x;
00056         y=pos->y;
00057     }
00058 
00059     std::string info() const {
00060         std::stringstream os;
00061         os << "(" << x << "," << y << ")";
00062         return os.str();
00063     }
00064 
00066     friend Coord operator+(const Coord& a, const Coord& b) {
00067         return Coord(a.x+b.x, a.y+b.y);
00068     }
00069 
00071     friend Coord operator-(const Coord& a, const Coord& b) {
00072         return Coord(a.x-b.x, a.y-b.y);
00073     }
00074 
00076     friend Coord operator*(const Coord& a, double f) {
00077         return Coord(a.x*f, a.y*f);
00078     }
00079 
00081     friend Coord operator/(const Coord& a, double f) {
00082         return Coord(a.x/f, a.y/f);
00083     }
00084 
00086     Coord operator+=(const Coord& a) {
00087         x+=a.x;
00088         y+=a.y;
00089         return *this;
00090     }
00091 
00093     Coord operator=(const Coord& a) {
00094         x=a.x;
00095         y=a.y;
00096         return *this;
00097     }
00098 
00100     Coord operator-=(const Coord& a) {
00101         x-=a.x;
00102         y-=a.y;
00103         return *this;
00104     }
00105 
00111     friend bool operator==(const Coord& a, const Coord& b) {
00112         return FWMath::close(a.x,b.x) && FWMath::close(a.y,b.y);
00113     }
00114 
00119     friend bool operator!=(const Coord& a, const Coord& b) {
00120         return !(a==b);
00121     }
00122 
00126     double distance( const Coord& a ) const {
00127         Coord dist=*this-a;
00128         return sqrt( dist.x*dist.x + dist.y*dist.y);
00129     }
00130 
00134     double sqrdist( const Coord& a ) const {
00135         Coord dist=*this-a;
00136         return dist.x*dist.x + dist.y*dist.y;
00137     }
00138 
00142     double sqrTorusDist(const Coord& b, const Coord& playGround) const {
00143         double minTorDist;
00144         double torDist;
00145         torDist = FWMath::torDist(this->x,              b.x, this->y,                  b.y);
00146         minTorDist = torDist;
00147         torDist = FWMath::torDist(this->x+playGround.x, b.x, this->y,                  b.y);
00148         if(torDist < minTorDist) minTorDist = torDist;
00149         torDist = FWMath::torDist(this->x-playGround.x, b.x, this->y,                  b.y);
00150         if(torDist < minTorDist) minTorDist = torDist;
00151         torDist = FWMath::torDist(this->x,              b.x, this->y+playGround.y,     b.y);
00152         if(torDist < minTorDist) minTorDist = torDist;
00153         torDist = FWMath::torDist(this->x,              b.x, this->y-playGround.y,     b.y);
00154         if(torDist < minTorDist) minTorDist = torDist;
00155         torDist = FWMath::torDist(this->x+playGround.x, b.x, this->y+playGround.y,     b.y);
00156         if(torDist < minTorDist) minTorDist = torDist;
00157         torDist = FWMath::torDist(this->x+playGround.x, b.x, this->y-playGround.y,     b.y);
00158         if(torDist < minTorDist) minTorDist = torDist;
00159         torDist = FWMath::torDist(this->x-playGround.x, b.x, this->y+playGround.y,     b.y);
00160         if(torDist < minTorDist) minTorDist = torDist;
00161         torDist = FWMath::torDist(this->x-playGround.x, b.x, this->y-playGround.y,     b.y);
00162         if(torDist < minTorDist) minTorDist = torDist;
00163         return minTorDist;
00164     }
00165 };
00166 
00167 #endif
00168 

Generated on Fri Jan 12 08:29:32 2007 for Mobility Framework by  doxygen 1.4.4