src/work/athos/xy/xy.h
author athos
Thu, 18 Mar 2004 16:50:07 +0000
changeset 201 b9158a014fe8
child 207 9910d5a5be7f
permissions -rw-r--r--
Alp?r javaslat?ra k?sz?tettem egy strukt?r?t 2 dimenzi?s vektorok (s?kvektorok) t?rol?s?ra. Olyasmiket tud, amiket s?kvektorokt?l szeretn?nk. A neve: xy, a hasonl? nevu .h file-ban tal?lhat?.
     1 /**
     2 2 dimensional vector (plainvector) implementation
     3 
     4 */
     5 #ifndef HUGO_XY_H
     6 #define HUGO_XY_H
     7 
     8 #include <iostream>
     9 
    10 using namespace std;
    11 template<typename T>
    12 class xy {
    13   T _x,_y;
    14 
    15 public:
    16 
    17   ///Default constructor: both coordinates become 0
    18   xy() { _x=_y=0; }
    19 
    20   ///Constructing from coordinates
    21   xy(T a, T b) { _x=a; _y=b; }
    22 
    23   ///Gives back the x coordinate
    24   T x(){
    25     return _x;
    26   };
    27 
    28   ///Gives back the y coordinate
    29   T y(){
    30     return _y;
    31   };
    32 
    33   ///Gives back the square of the norm of the vector
    34   T normSquare(){
    35     return _x*_x+_y*_y;
    36   };
    37   
    38   ///Increments the left hand side by u
    39   xy<T>& operator +=(const xy<T>& u){
    40     _x += u._x;
    41     _y += u._y;
    42     return *this;
    43   };
    44   
    45   ///Decrements the left hand side by u
    46   xy<T>& operator -=(const xy<T>& u){
    47     _x -= u._x;
    48     _y -= u._y;
    49     return *this;
    50   };
    51 
    52   ///Multiplying the left hand side with a scalar
    53   xy<T>& operator *=(const T &u){
    54     _x *= u;
    55     _y *= u;
    56     return *this;
    57   };
    58   
    59   ///Returns the scalar product of two vectors
    60   T operator *(const xy<T>& u){
    61     return _x*u._x+_y*u._y;
    62   };
    63   
    64   ///Returns the sum of two vectors
    65   xy<T> operator+(const xy<T> &u) const {
    66     xy<T> b=*this;
    67     return b+=u;
    68   };
    69 
    70   ///Returns the difference of two vectors
    71   xy<T> operator-(const xy<T> &u) const {
    72     xy<T> b=*this;
    73     return b-=u;
    74   };
    75 
    76   ///Returns a vector multiplied by a scalar
    77   xy<T> operator*(const T &u) const {
    78     xy<T> b=*this;
    79     return b*=u;
    80   };
    81 
    82   ///Testing equality
    83   bool operator==(const xy<T> &u){
    84     return (_x==u._x) && (_y==u._y);
    85   };
    86 
    87   ///Testing inequality
    88   bool operator!=(xy u){
    89     return  (_x!=u._x) || (_y!=u._y);
    90   };
    91 
    92 };
    93 ///Reading a plainvector from a stream
    94 template<typename T>
    95 inline
    96 istream& operator>>(istream &is, xy<T> &z)
    97 {
    98   ///This is not the best solution here: I didn't know how to solve this with friend functions
    99   T a,b;
   100   is >> a >> b;
   101   xy<T> buf(a,b);
   102   z=buf;
   103   return is;
   104 }
   105 
   106 ///Outputting a plainvector to a stream
   107 template<typename T>
   108 inline
   109 ostream& operator<<(ostream &os, xy<T> z)
   110 {
   111 	os << "(" << z.x() << ", " << z.y() << ")";
   112 	return os;
   113 }
   114 
   115 
   116 
   117 #endif //HUGO_XY_H