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