sbg_matrix3.h
Go to the documentation of this file.
1 
38 #ifndef SBG_MATRIX_3_H
39 #define SBG_MATRIX_3_H
40 
41 // Sbg headers
42 #include <sbgDefines.h>
43 #include "sbg_vector3.h"
44 
45 namespace sbg
46 {
47 
51 template <class T>
53 {
54 private:
55 
56  //---------------------------------------------------------------------//
57  //- Private variables -//
58  //---------------------------------------------------------------------//
59 
60  std::array<T, 9> data_;
61 
62 public:
63 
64  //---------------------------------------------------------------------//
65  //- Constructor -//
66  //---------------------------------------------------------------------//
67 
72  {
73  data_[0] = static_cast<T>(0.0);
74  data_[1] = static_cast<T>(0.0);
75  data_[2] = static_cast<T>(0.0);
76  data_[3] = static_cast<T>(0.0);
77  data_[4] = static_cast<T>(0.0);
78  data_[5] = static_cast<T>(0.0);
79  data_[6] = static_cast<T>(0.0);
80  data_[7] = static_cast<T>(0.0);
81  data_[8] = static_cast<T>(0.0);
82  }
83 
97  SbgMatrix3(T value00, T value01, T value02, T value10, T value11, T value12, T value20, T value21, T value22)
98  {
99  data_[0] = value00;
100  data_[1] = value01;
101  data_[2] = value02;
102  data_[3] = value10;
103  data_[4] = value11;
104  data_[5] = value12;
105  data_[6] = value20;
106  data_[7] = value21;
107  data_[8] = value22;
108  };
109 
116  SbgMatrix3(const T* p_raw_data, size_t array_size)
117  {
118  assert(array_size == 9);
119 
120  data_[0] = p_raw_data[0];
121  data_[1] = p_raw_data[1];
122  data_[2] = p_raw_data[2];
123  data_[3] = p_raw_data[3];
124  data_[4] = p_raw_data[4];
125  data_[5] = p_raw_data[5];
126  data_[6] = p_raw_data[6];
127  data_[7] = p_raw_data[7];
128  data_[8] = p_raw_data[8];
129  };
130 
131  //---------------------------------------------------------------------//
132  //- Parameters -//
133  //---------------------------------------------------------------------//
134 
135  //---------------------------------------------------------------------//
136  //- Operations -//
137  //---------------------------------------------------------------------//
138 
146  const T operator() (int i, int j) const
147  {
148  assert(i * 3 + j < 9);
149 
150  return data_[i * 3 + j];
151  }
152 
158  const T *data() const
159  {
160  return static_cast<const T*>(data_.data());
161  };
162 
163  const SbgVector3<T> operator*(const SbgVector3<T>& vect) const
164  {
165  T x = data_[0] * vect(0) + data_[1] * vect(1) + data_[2] * vect(2);
166  T y = data_[3] * vect(0) + data_[4] * vect(1) + data_[5] * vect(2);
167  T z = data_[6] * vect(0) + data_[7] * vect(1) + data_[8] * vect(2);
168 
169  return SbgVector3<T>(x, y, z);
170  }
171 
172  void transpose()
173  {
174  T swap = data_[1];
175  data_[1] = data_[3];
176  data_[3] = swap;
177 
178  swap = data_[2];
179  data_[2] = data_[6];
180  data_[6] = swap;
181 
182  swap = data_[5];
183  data_[5] = data_[7];
184  data_[7] = swap;
185  }
186 
195  void makeDcm(const SbgVector3f& euler)
196  {
197  float cr = cosf(euler(0));
198  float sr = sinf(euler(0));
199  float cp = cosf(euler(1));
200  float sp = sinf(euler(1));
201  float cy = cosf(euler(2));
202  float sy = sinf(euler(2));
203 
204  data_[0] = cp * cy;
205  data_[3] = cp * sy;
206  data_[6] = -sp;
207 
208  data_[1] = (sr * sp * cy) - (cr * sy);
209  data_[4] = (sr * sp * sy) + (cr * cy);
210  data_[7] = sr * cp;
211 
212  data_[2] = (cr * sp * cy) + (sy * sr);
213  data_[5] = (cr * sp * sy) - (sr * cy);
214  data_[8] = cr * cp;
215 
216  }
217 
226  void makeDcm(float w, float x, float y, float z)
227  {
228  float wx = w * x;
229  float wy = w * y;
230  float wz = w * z;
231  float xy = x * y;
232  float xz = x * z;
233  float yz = y * z;
234 
235  data_[0] = (2 * powf(w, 2)) + (2 * powf(x, 2)) - 1;
236  data_[3] = (2 * xy) + (2 * wz);
237  data_[6] = (2 * xz) - (2 * wy);
238 
239  data_[1] = (2 * xy) - (2 * wz);
240  data_[4] = (2 * powf(w, 2)) + (2 * powf(y, 2)) - 1;
241  data_[7] = (2 * yz) + (2 * wx);
242 
243  data_[2] = (2 * wy) + (2 * xz);
244  data_[5] = (2 * yz) - (2 * wx);
245  data_[8] = (2 * powf(w, 2)) + (2 * powf(z, 2)) - 1;
246  }
247 
248 };
249 
250 
253 
254 }
255 
256 #endif // SBG_MATRIX_3_H
sbg::SbgVector3
Definition: sbg_vector3.h:72
sbg::SbgMatrix3::data
const T * data() const
Definition: sbg_matrix3.h:158
sbg::SbgMatrix3d
SbgMatrix3< double > SbgMatrix3d
Definition: sbg_matrix3.h:252
sbg::SbgMatrix3::data_
std::array< T, 9 > data_
Definition: sbg_matrix3.h:60
sbg::SbgMatrix3
Definition: sbg_matrix3.h:52
sbg::SbgMatrix3::operator*
const SbgVector3< T > operator*(const SbgVector3< T > &vect) const
Definition: sbg_matrix3.h:163
sbg::SbgMatrix3::transpose
void transpose()
Definition: sbg_matrix3.h:172
sbgDefines.h
sbg::SbgMatrix3::makeDcm
void makeDcm(float w, float x, float y, float z)
Definition: sbg_matrix3.h:226
sbg
Definition: config_applier.h:45
sbg::SbgMatrix3::operator()
const T operator()(int i, int j) const
Definition: sbg_matrix3.h:146
sbg::SbgMatrix3f
SbgMatrix3< float > SbgMatrix3f
Definition: sbg_matrix3.h:251
sbg::SbgMatrix3::SbgMatrix3
SbgMatrix3(const T *p_raw_data, size_t array_size)
Definition: sbg_matrix3.h:116
sbg::SbgMatrix3::makeDcm
void makeDcm(const SbgVector3f &euler)
Definition: sbg_matrix3.h:195
sbg_vector3.h
Handle a X,Y,Z vector.
sbg::SbgMatrix3::SbgMatrix3
SbgMatrix3(T value00, T value01, T value02, T value10, T value11, T value12, T value20, T value21, T value22)
Definition: sbg_matrix3.h:97
sbg::SbgMatrix3::SbgMatrix3
SbgMatrix3()
Definition: sbg_matrix3.h:71


sbg_driver
Author(s): SBG Systems
autogenerated on Fri Oct 11 2024 02:13:40