00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013
00014
00015
00016 #ifndef STARLAB_vector_H
00017 # define STARLAB_vector_H
00018
00019 #include "stdinc.h"
00020
00022
00026
00027 class vec
00028 {
00029 private:
00030
00032
00033 real element[3];
00034
00035 public:
00036
00038
00039 vec(real c = 0)
00040 {element[0] = element[1] = element[2] = c;}
00041
00043
00044 vec(real x, real y, real z)
00045 {element[0] = x; element[1] = y; element[2] = z;}
00046
00048
00053
00054 real & operator [] (int i) {return element[i];}
00055
00057
00058 inline void print() {cout << element[0] << " " << element[1] << " "
00059 << element[2] << "\n";}
00060
00062
00063 vec operator - ()
00064 {return vec(-element[0], -element[1], -element[2]);}
00065
00067
00068 real operator * (const vec& b)
00069 {return element[0]*b.element[0]
00070 + element[1]*b.element[1]
00071 + element[2]*b.element[2];}
00072
00074
00075 vec operator ^ (const vec &b)
00076 {return vec(element[1]*b.element[2] - element[2]*b.element[1],
00077 element[2]*b.element[0] - element[0]*b.element[2],
00078 element[0]*b.element[1] - element[1]*b.element[0]);}
00079
00081
00082 vec operator + (const vec &b)
00083 {return vec(element[0]+b.element[0],
00084 element[1]+b.element[1],
00085 element[2]+b.element[2]);}
00087
00088 vec operator - (const vec &b)
00089 {return vec(element[0]-b.element[0],
00090 element[1]-b.element[1],
00091 element[2]-b.element[2]);}
00092
00093 friend vec operator + (real, const vec & );
00094 friend vec operator + (const vec &, real);
00095
00097
00098 friend vec operator * (real, const vec & );
00099
00101
00102 friend vec operator * (const vec &, real);
00103
00105
00106 friend vec operator / (const vec &, real);
00107
00108
00109
00110
00111
00113
00114 friend bool operator == (const vec &, const vec &);
00115
00117
00118 friend bool operator != (const vec &, const vec &);
00119
00120
00121
00122
00123
00124
00126
00127 vec operator * (const real b)
00128 {return vec(element[0]*b, element[1]*b, element[2]*b); }
00129
00131
00132 vec operator + (const real b)
00133 {return vec(element[0]+b, element[1]+b, element[2]+b); }
00134
00136
00137 vec& operator += (const vec& b)
00138 {element[0] += b.element[0];
00139 element[1] += b.element[1];
00140 element[2] += b.element[2];
00141 return *this;}
00142
00144
00145 vec& operator -= (const vec& b)
00146 {element[0] -= b.element[0];
00147 element[1] -= b.element[1];
00148 element[2] -= b.element[2];
00149 return *this;}
00150
00152
00153 vec& operator *= (const real b)
00154 {element[0] *= b;
00155 element[1] *= b;
00156 element[2] *= b;
00157 return *this;}
00158
00160
00161 vec& operator /= (const real b)
00162 {element[0] /= b;
00163 element[1] /= b;
00164 element[2] /= b;
00165 return *this;}
00166
00168
00169 friend ostream & operator << (ostream & , const vec & );
00170
00172
00173 friend istream & operator >> (istream & , vec & );
00174 };
00175
00176 inline ostream & operator << (ostream & s, const vec & v)
00177 {return s << v.element[0] << " " << v.element[1]
00178 << " " << v.element[2];}
00179
00180 inline istream & operator >> (istream & s, vec & v)
00181 {s >> v.element[0] >> v.element[1] >> v.element[2];
00182 return s;}
00183
00184 inline real square(vec v) {return v*v;}
00185 inline real abs(vec v) {return sqrt(v*v);}
00186
00187
00188
00189 inline real abs1(vec v) {return abs(v[0]) + abs(v[1]) + abs(v[2]);}
00190
00191 inline vec operator + (real b, const vec & v)
00192 {return vec(b+v.element[0],
00193 b+v.element[1],
00194 b+v.element[2]);}
00195
00196 inline vec operator + (const vec & v, real b)
00197 {return vec(b+v.element[0],
00198 b+v.element[1],
00199 b+v.element[2]);}
00200
00201 inline vec operator * (real b, const vec & v)
00202 {return vec(b*v.element[0],
00203 b*v.element[1],
00204 b*v.element[2]);}
00205
00206 inline vec operator * (const vec & v, real b)
00207 {return vec(b*v.element[0],
00208 b*v.element[1],
00209 b*v.element[2]);}
00210
00211 inline vec operator / (const vec & v, real b)
00212 {return vec(v.element[0]/b,
00213 v.element[1]/b,
00214 v.element[2]/b);}
00215
00216 inline bool operator == (const vec& u, const vec& v)
00217 {return (u.element[0] == v.element[0]
00218 && u.element[1] == v.element[1]
00219 && u.element[2] == v.element[2]);}
00220
00221 inline bool operator != (const vec& u, const vec& v)
00222 {return !(u==v);}
00223
00224 #endif
00225
00226
00227
00228
00229
00230
00231