R3.h

Go to the documentation of this file.
00001 // ----------------------------------------------------------------------------
00002 //
00003 // $Id$
00004 //
00005 // Copyright 2008, 2009, 2010, 2011, 2012  Antonio Franchi and Paolo Stegagno    
00006 //
00007 // This file is part of MIP. 
00008 //
00009 // MIP is free software: you can redistribute it and/or modify
00010 // it under the terms of the GNU General Public License as published by
00011 // the Free Software Foundation, either version 3 of the License, or
00012 // (at your option) any later version.
00013 //
00014 // MIP is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 // GNU General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU General Public License
00020 // along with MIP. If not, see <http://www.gnu.org/licenses/>.
00021 //
00022 // Contact info: antonio.franchi@tuebingen.mpg.de stegagno@diag.uniroma1.it
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 //BOOST SERIALIZATION
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   /*const */Position3D operator*(const Position3D &pos) const;
00159   
00161   /*const */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   // String getter & setter (Syntax "x,y,z")
00257   bool fromString(const string& s);
00258   string toString() const;
00259 };
00260 
00261 
00262 // class Acceleration3D;
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   // (mriedel:) This does nothing
00303   //using Position3D::operator=;
00304   
00305   //using Position3D::operator+;
00306   
00307   //using Position3D::operator-;
00308   
00309   //using Position3D::operator/;
00310   
00311   //using Position3D::operator*;
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   // mriedel: This does nothing
00360   //using Position3D::operator=;
00361   
00362   //using Position3D::operator+;
00363   
00364   //using Position3D::operator-;
00365   
00366   //using Position3D::operator/;
00367   
00368   //using Position3D::operator*;
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 /* @} */

Generated on Mon Feb 20 07:01:07 2017 for MIP by  doxygen 1.5.6