Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/lina/rotf

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/g4tools/include/tools/lina/rotf (Version 11.3.0) and /externals/g4tools/include/tools/lina/rotf (Version 11.1.2)


  1 // Copyright (C) 2010, Guy Barrand. All rights      1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
  2 // See the file tools.license for terms.            2 // See the file tools.license for terms.
  3                                                     3 
  4 #ifndef tools_rotf                                  4 #ifndef tools_rotf
  5 #define tools_rotf                                  5 #define tools_rotf
  6                                                     6 
  7 // rotation done with quaternion.                   7 // rotation done with quaternion.
  8                                                     8 
  9 #include "qrot"                                     9 #include "qrot"
 10 #include "vec3f"                                   10 #include "vec3f"
 11 #include "vec4f"                                   11 #include "vec4f"
 12 #include "mat4f"                                   12 #include "mat4f"
 13                                                    13 
 14 namespace tools {                                  14 namespace tools {
 15                                                    15 
 16 class rotf : public qrot<vec3f,vec4f> {            16 class rotf : public qrot<vec3f,vec4f> {
 17   typedef qrot<vec3f,vec4f> parent;                17   typedef qrot<vec3f,vec4f> parent;
 18 private:                                           18 private:
 19   rotf(float a_q0,float a_q1,float a_q2,float      19   rotf(float a_q0,float a_q1,float a_q2,float a_q3):parent(a_q0,a_q1,a_q2,a_q3) {}
 20 public:                                            20 public:
 21   rotf():parent() {} //zero rotation around th     21   rotf():parent() {} //zero rotation around the positive Z axis.
 22   rotf(const vec3f& a_axis,float a_radians):pa     22   rotf(const vec3f& a_axis,float a_radians):parent(a_axis,a_radians,::sinf,::cosf) {}
 23   rotf(const vec3f& a_from,const vec3f& a_to):     23   rotf(const vec3f& a_from,const vec3f& a_to):parent(a_from,a_to,::sqrtf,::fabsf) {}
 24   virtual ~rotf(){}                                24   virtual ~rotf(){}
 25 public:                                            25 public:
 26   rotf(const rotf& a_from):parent(a_from) {}       26   rotf(const rotf& a_from):parent(a_from) {}
 27   rotf& operator=(const rotf& a_from){             27   rotf& operator=(const rotf& a_from){
 28     parent::operator=(a_from);                     28     parent::operator=(a_from);
 29     return *this;                                  29     return *this;
 30   }                                                30   }
 31 public:                                            31 public:
 32   rotf& operator*=(const rotf& a_q) {              32   rotf& operator*=(const rotf& a_q) {
 33     parent::operator*=(a_q);                       33     parent::operator*=(a_q);
 34     return *this;                                  34     return *this;
 35   }                                                35   }
 36   rotf operator*(const rotf& a_r) const {          36   rotf operator*(const rotf& a_r) const {
 37     rotf tmp(*this);                               37     rotf tmp(*this);
 38     tmp *= a_r;                                    38     tmp *= a_r;
 39     return tmp;                                    39     return tmp;
 40   }                                                40   }
 41 public:                                            41 public:
 42   bool set_value(const vec3f& a_from,const vec     42   bool set_value(const vec3f& a_from,const vec3f& a_to){
 43     return parent::set_value(a_from,a_to,::sqr     43     return parent::set_value(a_from,a_to,::sqrtf,::fabsf);
 44   }                                                44   }
 45   bool set_value(const vec3f& a_from,float a_a     45   bool set_value(const vec3f& a_from,float a_a){
 46     return parent::set_value(a_from,a_a,::sinf     46     return parent::set_value(a_from,a_a,::sinf,::cosf);
 47   }                                                47   }
 48   bool value(vec3f& a_from,float& a_a) const {     48   bool value(vec3f& a_from,float& a_a) const {
 49     return parent::value(a_from,a_a,::sinf,::a     49     return parent::value(a_from,a_a,::sinf,::acosf); //WARNING acos and not cos
 50   }                                                50   }
 51                                                    51 
 52   void value(mat4f& a_m) const {parent::value(     52   void value(mat4f& a_m) const {parent::value(a_m);}
 53   void set_value(const mat4f& a_m) {parent::se     53   void set_value(const mat4f& a_m) {parent::set_value(a_m,::sqrtf);}
 54                                                    54 
 55   //NOTE : don't handle a static object becaus     55   //NOTE : don't handle a static object because of mem balance.
 56   //static const rotf& identity() {                56   //static const rotf& identity() {
 57   //  static const rotf s_v(0,0,0,1);              57   //  static const rotf s_v(0,0,0,1);
 58   //  return s_v;                                  58   //  return s_v;
 59   //}                                              59   //}
 60 };                                                 60 };
 61                                                    61 
 62 }                                                  62 }
 63                                                    63 
 64 #include <sstream>                                 64 #include <sstream>
 65                                                    65 
 66 namespace tools {                                  66 namespace tools {
 67                                                    67 
 68 inline bool tos(const rotf& a_v,std::string& a     68 inline bool tos(const rotf& a_v,std::string& a_s) {
 69   vec3f axis;                                      69   vec3f axis;
 70   float angle = 0;                                 70   float angle = 0;
 71   if(!a_v.value(axis,angle)) {a_s.clear();retu     71   if(!a_v.value(axis,angle)) {a_s.clear();return false;}
 72   std::ostringstream strm;                         72   std::ostringstream strm;
 73   strm << axis[0] << " "                           73   strm << axis[0] << " "
 74        << axis[1] << " "                           74        << axis[1] << " "
 75        << axis[2] << " "                           75        << axis[2] << " "
 76        << angle;                                   76        << angle;
 77   a_s = strm.str();                                77   a_s = strm.str();
 78   return true;                                     78   return true;
 79 }                                                  79 }
 80                                                    80 
 81 }                                                  81 }
 82                                                    82 
 83 #endif                                             83 #endif