00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _Matrix_coordinate_h_
00026 #define _Matrix_coordinate_h_
00027
00028 #include "matrix_global.h"
00029 #include "matrixTool.h"
00030
00031
00032 namespace PLib {
00033
00034
00042 class Coordinate {
00043 public:
00044 int i,j ;
00045 Coordinate()
00046 { i=0;j=0;}
00047 Coordinate(int I, int J)
00048 { i=I ; j=J ; }
00049 Coordinate(int a)
00050 { i=j=a; }
00051
00052 const Coordinate& operator=(const Coordinate& c)
00053 {i=c.i; j=c.j; return *this ;}
00054 friend int operator==(const Coordinate& a, const Coordinate& b)
00055 { return ( a.i == b.i && a.j == b.j ); }
00056
00057 friend float distance2(const Coordinate& a){ return float(a.i*a.i) + float(a.j*a.j) ; }
00058 friend float distance(const Coordinate& a) { return sqrt(distance(a)) ; }
00059
00060 friend Coordinate operator-(const Coordinate& a, const Coordinate& b){ Coordinate m ; m.i = a.i-b.i ; m.j = a.j-b.j ; return m ; }
00061 friend Coordinate operator+(const Coordinate& a, const Coordinate& b){ Coordinate m ; m.i = a.i+b.i ; m.j = a.j+b.j ; return m ; }
00062
00063 friend ostream& operator<<(ostream& os, const Coordinate& point);
00064 friend istream& operator>>(istream& os, Coordinate& point);
00065 };
00066
00067 inline int operator<(const Coordinate& a, const Coordinate& b){
00068 return (a.i<b.i && a.j<b.j ) ; }
00069 inline int operator>(const Coordinate& a, const Coordinate& b){
00070 return (a.i>b.i && a.j>b.j ) ; }
00071 inline int operator<=(const Coordinate& a, const Coordinate& b){
00072 return (a.i<=b.i && a.j<=b.j ) ; }
00073 inline int operator>=(const Coordinate& a, const Coordinate& b){
00074 return (a.i>=b.i && a.j>=b.j ) ; }
00075
00076
00090 inline ostream& operator<<(ostream& os,const Coordinate& c)
00091 {
00092 os << c.i << " " << c.j << " " ;
00093 return os;
00094 }
00095
00096
00109 inline istream& operator>>(istream& os, Coordinate& c){
00110 os >> c.i >> c.j ;
00111 return os ;
00112 }
00113
00114
00115 inline Coordinate minimum(Coordinate a, Coordinate b){
00116 Coordinate m ;
00117 m.i = minimum(a.i,b.i) ;
00118 m.j = minimum(a.j,b.j) ;
00119 return m ;
00120 }
00121
00122 inline Coordinate maximum(Coordinate a, Coordinate b){
00123 Coordinate m ;
00124 m.i = maximum(a.i,b.i) ;
00125 m.j = maximum(a.j,b.j) ;
00126 return m ;
00127 }
00128
00129
00130 template <class T>
00131 inline Coordinate minimumByRef(const Coordinate &a, const Coordinate &b){
00132 Coordinate m ;
00133 m.i = minimum(a.i,b.i) ;
00134 m.j = minimum(a.j,b.j) ;
00135 return m ;
00136 }
00137
00138
00139 inline Coordinate maximumByRef(const Coordinate &a, const Coordinate &b){
00140 Coordinate m ;
00141 m.i = maximum(a.i,b.i) ;
00142 m.j = maximum(a.j,b.j) ;
00143 return m ;
00144 }
00145
00146
00147 }
00148
00149 #endif