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