R3.h
Go to the documentation of this file.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
00026
00030
00032
00033
00034 #ifndef __R3_H_
00035 #define __R3_H_
00036
00037 #ifdef MIP_HOST_APPLE
00038 #include <applePatch.h>
00039 #endif
00040
00041 #include <stdio.h>
00042 #include <math.h>
00043 #include <vector>
00044 #include <iostream>
00045 #include <string>
00046 #include <sstream>
00047 #include <sys/time.h>
00048 #include <sys/select.h>
00049 #include <assert.h>
00050
00051
00052 #ifdef FOUND_BOOST_SER
00053 #include <boost/serialization/vector.hpp>
00054 #include <boost/archive/text_iarchive.hpp>
00055 #include <boost/archive/text_oarchive.hpp>
00056 #endif
00057
00058
00059 #include <Types.h>
00060 #include <Association.h>
00061 #include <S1.h>
00062 #include <R2.h>
00063
00064 #define R3_COORD(VECT) VECT.x(),VECT.y(),VECT.z()
00065 #define R3_VAR_COORD(VECT,X,Y,Z) VECT.X,VECT.Y,VECT.Z
00066
00067 using namespace std;
00068
00071 class Position3D {
00072
00073 private:
00074 #ifdef FOUND_BOOST_SER
00075 friend class boost::serialization::access;
00076 template<class Archive>
00077 void serialize(Archive & ar, const unsigned int version){
00078 ar & _x;
00079 ar & _y;
00080 ar & _z;
00081 }
00082 #endif
00083
00084 protected:
00085 Decimal _x;
00086 Decimal _y;
00087 Decimal _z;
00088
00089 public:
00091 Position3D();
00092
00094 Position3D(const Decimal &x_in, const Decimal& y_in, const Decimal& z_in);
00095
00098 Position3D(const vector<Decimal>& v);
00099
00102 Position3D(Decimal v[3]);
00103
00105 Position3D(const Angle& phi, const Angle& theta);
00106
00108 Position3D(const Decimal& ro, const Angle& phi, const Decimal& zita);
00109
00111 Position3D(const Decimal& ro, const Angle& phi, const Angle& theta);
00112
00114 Position3D(const Position& pos, const Decimal& z);
00115
00117 Position3D(const Position3D& p);
00118
00120 Position3D& operator=(const Position3D& rhs);
00121
00123 Position3D operator -() const;
00124
00126 Position3D& operator+=(const Position3D& a) ;
00127
00129 Position3D& operator-=(const Position3D& a);
00130
00132 Position3D& operator*=(const Decimal& scalar);
00133
00135 Position3D& operator/=(const Decimal& scalar);
00136
00138 Position3D operator+(const Position3D &other) const;
00139
00141 Position3D operator-(const Position3D &other) const;
00142
00145 Position3D operator*(const Decimal& scalar) const;
00146
00149 Position3D operator/(const Decimal& scalar) const;
00150
00152 Position3D& operator*=(const Position3D &pos);
00153
00155 Position3D& operator/=(const Position3D &pos);
00156
00158 Position3D operator*(const Position3D &pos) const;
00159
00161 Position3D operator/(const Position3D &pos) const;
00162
00164 bool operator==(const Position3D &other) const;
00165
00167 bool operator!=(const Position3D &other) const;
00168
00170 bool operator<(const Position3D &other) const;
00171
00173 bool operator>(const Position3D &other) const;
00174
00176 bool operator<=(const Position3D &other) const;
00177
00179 bool operator>=(const Position3D &other) const;
00180
00182 vector<Decimal> vect() const;
00183
00185 void vect(vector<Decimal>&) const;
00186
00190 void vect(Decimal v[3]) const;
00191
00193 Position3D maximum(const Position3D& p) const;
00194
00196 Position3D minimum(const Position3D& p) const;
00197
00199 Position3D unit() const;
00200
00202 Decimal x() const;
00203
00205 Decimal y() const;
00206
00208 Decimal z() const;
00209
00211 void setX(const Decimal& val);
00212
00214 void setY(const Decimal& val);
00215
00217 void setZ(const Decimal& val);
00218
00220 Decimal norm() const;
00221
00224 Decimal squareNorm() const;
00225
00229 Decimal dist(Position3D &p) const;
00230
00233 Angle azimuth() const;
00234
00237 Angle zenith() const;
00238
00242 Decimal scalar(const Position3D &p) const;
00243
00247 Position3D linearMap(Decimal m[3][3]) const;
00248
00251 Position3D satNorm(const Decimal& sat);
00252
00254 virtual string print(PrintTypes type = PRINT_TYPE_WITH_UNITS) const;
00255
00256
00257 bool fromString(const string& s);
00258 string toString() const;
00259 };
00260
00261
00262
00263
00267 class Velocity3D : public Position3D{
00268 private:
00269 #ifdef FOUND_BOOST_SER
00270 friend class boost::serialization::access;
00271 template<class Archive>
00272 void serialize(Archive & ar, const unsigned int version){
00273 ar & _x;
00274 ar & _y;
00275 ar & _z;
00276 }
00277 #endif
00278 public:
00279
00281 Velocity3D() : Position3D() {}
00282
00284 Velocity3D(Decimal x_in,Decimal y_in,Decimal z_in) : Position3D(x_in,y_in,z_in) {}
00285
00287 Velocity3D(const Velocity3D& p) {
00288 _x=p._x;
00289 _y=p._y;
00290 _z=p._z;
00291 }
00292
00295 Velocity3D(vector<Decimal> v) : Position3D(v){}
00296
00299 Velocity3D(Decimal v[3]) : Position3D(v){};
00300
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00314 Velocity3D(Position3D p) : Position3D(p) {
00315 }
00316
00318 virtual string print(PrintTypes type = PRINT_TYPE_WITH_UNITS) const;
00319 };
00320
00324 class Acceleration3D : public Position3D{
00325 private:
00326 #ifdef FOUND_BOOST_SER
00327 friend class boost::serialization::access;
00328 template<class Archive>
00329 void serialize(Archive & ar, const unsigned int version){
00330 ar & _x;
00331 ar & _y;
00332 ar & _z;
00333 }
00334 #endif
00335
00336 public:
00338 Acceleration3D() : Position3D() {}
00339
00341 Acceleration3D(Decimal x_in,Decimal y_in,Decimal z_in) : Position3D(x_in,y_in,z_in) {}
00342
00344 Acceleration3D(const Acceleration3D& p) {
00345 _x=p._x;
00346 _y=p._y;
00347 _z=p._z;
00348 }
00349
00352 Acceleration3D(vector<Decimal> v) : Position3D(v){}
00353
00356 Acceleration3D(Decimal v[3]) : Position3D(v){};
00357
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00371 Acceleration3D(Position3D p) : Position3D(p) {
00372 }
00373
00375 virtual string print(PrintTypes type = PRINT_TYPE_WITH_UNITS) const;
00376 };
00377
00378
00379 #endif
00380
00381
00382
00383