g4tools  5.4.0
vec2f
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_vec2f
5 #define tools_vec2f
6 
7 #include "vec2"
8 #include "../S_STRING"
9 #include <cmath>
10 
11 namespace tools {
12 
13 class vec2f : public vec2<float> {
14  typedef vec2<float> parent;
15 public:
16  TOOLS_SCLASS(tools::vec2f) //for stype()
17 public:
18  vec2f():parent(){}
19  vec2f(const float a_vec[2]):parent(a_vec){}
20  vec2f(float a0,float a1):parent(a0,a1){}
21  virtual ~vec2f() {}
22 public:
23  vec2f(const vec2f& a_from): parent(a_from){}
24  vec2f& operator=(const vec2f& a_from){
25  parent::operator=(a_from);
26  return *this;
27  }
28 
29  vec2f(const parent& a_from):parent(a_from){}
30 
31 public: //operators
32  vec2f operator*(float a_v) const {
33  return vec2f(m_data[0]*a_v,
34  m_data[1]*a_v);
35  }
36  vec2f operator+(const vec2f& a_v) const {
37  return vec2f(m_data[0]+a_v.m_data[0],
38  m_data[1]+a_v.m_data[1]);
39  }
40  vec2f operator-(const vec2f& a_v) const {
41  return vec2f(m_data[0]-a_v.m_data[0],
42  m_data[1]-a_v.m_data[1]);
43  }
44  vec2f& operator+=(const vec2f& a_v) {
45  m_data[0] += a_v.m_data[0];
46  m_data[1] += a_v.m_data[1];
47  return *this;
48  }
49  vec2f& operator*=(float a_v) {
50  m_data[0] *= a_v;
51  m_data[1] *= a_v;
52  return *this;
53  }
54  vec2f operator-() const {
55  return vec2f(-m_data[0],-m_data[1]);
56  }
57 public:
58 #define TOOLS_VEC2F_MORE_PREC
59 #ifdef TOOLS_VEC2F_MORE_PREC
60  float length() const {
61  return float(::sqrt(m_data[0]*m_data[0]+m_data[1]*m_data[1]));
62  }
63  float normalize() {
64  float norme = length();
65  if(!norme) return 0;
66  divide(norme);
67  return norme;
68  }
69 #else
70  float length() const {return parent::length(::sqrtf);}
71  float normalize() {return parent::normalize(::sqrtf);}
72 #endif
73 public: //iv2sg
74  bool equals(const vec2f& a_v,const float a_epsil) const {
75  //if(a_epsil<0.0f))
76  float d0 = m_data[0]-a_v.m_data[0];
77  float d1 = m_data[1]-a_v.m_data[1];
78  return ((d0*d0+d1*d1)<=a_epsil);
79  }
80  void negate() {
81  m_data[0] = -m_data[0];
82  m_data[1] = -m_data[1];
83  }
84 
85 private:static void check_instantiation() {vec2f v(0,0);v.set_value(1,1);}
86 };
87 
88 inline vec2f operator*(float a_f,const vec2f& a_v) {
89  vec2f res(a_v);
90  res *= a_f;
91  return res;
92 }
93 
94 }
95 
96 #include <vector>
97 
98 namespace tools {
99 
100 #ifndef SWIG
101 //for sf, mf :
102 inline bool set_from_vec(vec2f& a_v,const std::vector<float>& a_sv) {
103  if(a_sv.size()!=2) return false;
104  a_v[0] = a_sv[0];
105  a_v[1] = a_sv[1];
106  return true;
107 }
108 #endif
109 
110 }
111 
112 #endif
tools::vec2< float >::m_data
float m_data[2]
Definition: vec2:197
tools::vec2f::operator*
vec2f operator*(float a_v) const
Definition: vec2f:32
tools::vec2f::vec2f
vec2f(const parent &a_from)
Definition: vec2f:29
tools::vec2f
Definition: vec2f:13
tools::operator*
array< T > operator*(const T &a_fac, const array< T > &a_m)
Definition: array:617
vec2
tools::vec2f::operator+
vec2f operator+(const vec2f &a_v) const
Definition: vec2f:36
tools::vec2f::operator-
vec2f operator-(const vec2f &a_v) const
Definition: vec2f:40
tools::vec2f::operator=
vec2f & operator=(const vec2f &a_from)
Definition: vec2f:24
tools::vec2f::~vec2f
virtual ~vec2f()
Definition: vec2f:21
tools::vec2f::operator-
vec2f operator-() const
Definition: vec2f:54
tools::vec2f::length
float length() const
Definition: vec2f:60
tools::vec2< float >::length
float length(float(*a_sqrt)(float)) const
Definition: vec2:97
tools::vec2f::negate
void negate()
Definition: vec2f:80
tools::vec2f::TOOLS_SCLASS
TOOLS_SCLASS(tools::vec2f) public
Definition: vec2f:16
tools::vec2f::equals
bool equals(const vec2f &a_v, const float a_epsil) const
Definition: vec2f:74
tools::vec2f::operator+=
vec2f & operator+=(const vec2f &a_v)
Definition: vec2f:44
tools::vec2< float >::divide
bool divide(const float &a_T)
Definition: vec2:123
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26
tools::vec2< float >::operator=
vec2 & operator=(const vec2 &a_from)
Definition: vec2:61
tools::vec2
Definition: vec2:16
tools::vec2f::vec2f
vec2f(const float a_vec[2])
Definition: vec2f:19
tools::vec2f::vec2f
vec2f(const vec2f &a_from)
Definition: vec2f:23
tools::set_from_vec
bool set_from_vec(vec2f &a_v, const std::vector< float > &a_sv)
Definition: vec2f:102
tools::vec2f::operator*=
vec2f & operator*=(float a_v)
Definition: vec2f:49
tools::vec2f::vec2f
vec2f(float a0, float a1)
Definition: vec2f:20
tools::vec2f::normalize
float normalize()
Definition: vec2f:63
tools::vec2< float >::normalize
float normalize(float(*a_sqrt)(float))
Definition: vec2:101