xseuler.h
Go to the documentation of this file.
1 
2 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // 1. Redistributions of source code must retain the above copyright notice,
9 // this list of conditions, and the following disclaimer.
10 //
11 // 2. Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions, and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
14 //
15 // 3. Neither the names of the copyright holders nor the names of their contributors
16 // may be used to endorse or promote products derived from this software without
17 // specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
26 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
28 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
29 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
30 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
31 //
32 
33 
34 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
35 // All rights reserved.
36 //
37 // Redistribution and use in source and binary forms, with or without modification,
38 // are permitted provided that the following conditions are met:
39 //
40 // 1. Redistributions of source code must retain the above copyright notice,
41 // this list of conditions, and the following disclaimer.
42 //
43 // 2. Redistributions in binary form must reproduce the above copyright notice,
44 // this list of conditions, and the following disclaimer in the documentation
45 // and/or other materials provided with the distribution.
46 //
47 // 3. Neither the names of the copyright holders nor the names of their contributors
48 // may be used to endorse or promote products derived from this software without
49 // specific prior written permission.
50 //
51 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
52 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
53 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
54 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
56 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
58 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
59 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
60 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
61 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
62 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
63 //
64 
65 #ifndef XSEULER_H
66 #define XSEULER_H
67 
68 #include "xsmath.h"
69 #include <math.h>
70 
71 #ifdef __cplusplus
72 #include "xsvector.h"
73 extern "C" {
74 #endif
75 #ifndef __cplusplus
76 #define XSEULER_INITIALIZER { { { XsMath_zero,XsMath_zero,XsMath_zero } } }
77 struct XsVector;
78 #endif
79 
80 struct XsEuler;
81 struct XsQuaternion;
82 struct XsMatrix;
83 
84 XSTYPES_DLL_API void XsEuler_destruct(struct XsEuler* thisPtr);
85 XSTYPES_DLL_API int XsEuler_empty(const struct XsEuler* thisPtr);
86 XSTYPES_DLL_API void XsEuler_fromQuaternion(struct XsEuler* thisPtr, const struct XsQuaternion* quat);
87 
88 #ifdef __cplusplus
89 } // extern "C"
90 #endif
91 
92 struct XsEuler
93 {
94 #ifdef __cplusplus
98  inline XsEuler(XsReal x_, XsReal y_, XsReal z_) : m_x(x_), m_y(y_), m_z(z_) {}
100  inline XsEuler(const XsEuler& other) : m_x(other.m_x), m_y(other.m_y), m_z(other.m_z) {}
102  inline explicit XsEuler(const XsVector& other) : m_x(other[0]), m_y(other[1]), m_z(other[2]) {}
103 
105  inline explicit XsEuler(const XsQuaternion& q)
106  {
107  XsEuler_fromQuaternion(this, &q);
108  }
109 
111  inline XsEuler& operator=(const XsEuler& other)
112  {
113  m_x = other.m_x;
114  m_y = other.m_y;
115  m_z = other.m_z;
116  return *this;
117  }
118 
120  inline XsReal operator[](XsSize index) const
121  {
122  assert(index <= 2);
123  return m_data[index];
124  }
125 
127  inline XsReal& operator[](XsSize index)
128  {
129  assert(index <= 2);
130  return m_data[index];
131  }
132 
134  inline bool empty() const
135  {
136  return m_x == XsMath_zero && m_y == XsMath_zero && m_z == XsMath_zero;
137  }
138 
140  inline const XsReal* data() const
141  {
142  return m_data;
143  }
144 
146  inline XsEuler& fromQuaternion(const XsQuaternion& quat)
147  {
148  XsEuler_fromQuaternion(this, &quat);
149  return *this;
150  }
151 
154  inline bool operator == (const XsEuler& other) const
155  {
156  return m_roll == other.m_roll && m_pitch == other.m_pitch && m_yaw == other.m_yaw;
157  }
158 
161  inline bool operator != (const XsEuler& other) const
162  {
163  return m_roll != other.m_roll || m_pitch != other.m_pitch || m_yaw != other.m_yaw;
164  }
165 
167  inline XsReal roll() const
168  {
169  return m_roll;
170  }
172  inline XsReal pitch() const
173  {
174  return m_pitch;
175  }
177  inline XsReal yaw() const
178  {
179  return m_yaw;
180  }
181 
183  inline XsReal x() const
184  {
185  return m_x;
186  }
188  inline XsReal y() const
189  {
190  return m_y;
191  }
193  inline XsReal z() const
194  {
195  return m_z;
196  }
197 
199  inline bool isEqual(const XsEuler& other, XsReal tolerance) const
200  {
201  return fabs(m_x - other.m_x) <= tolerance &&
202  fabs(m_y - other.m_y) <= tolerance &&
203  fabs(m_z - other.m_z) <= tolerance;
204  }
205 
206 private:
207 #endif
208 
209  union
210  {
211  struct
212  {
216  };
217  struct
218  {
222  };
224  };
225 };
226 
227 typedef struct XsEuler XsEuler;
228 
229 #endif
XsMatrix
A class that represents a matrix of real numbers.
Definition: xsmatrix.h:107
XsVector
A class that represents a vector of real numbers.
Definition: xsvector.h:113
XsEuler::m_pitch
XsReal m_pitch
Stores the pitch component of the euler triplet.
Definition: xseuler.h:220
XsEuler::m_x
XsReal m_x
Stores the x component of the euler triplet.
Definition: xseuler.h:213
xsvector.h
XsQuaternion
A class that implements a quaternion.
Definition: xsquaternion.h:102
data
data
operator==
bool operator==(const XsFilterProfile &lhs, const XsFilterProfile &rhs)
Returns true if lhs has the same type as rhs.
Definition: scenariomatchpred.h:81
XsReal
double XsReal
Defines the floating point type used by the Xsens libraries.
Definition: xstypedefs.h:73
XsEuler::m_data
XsReal m_data[3]
Stores the euler triplet in an array of three elements.
Definition: xseuler.h:223
XsSize
size_t XsSize
XsSize must be unsigned number!
Definition: xstypedefs.h:74
xsmath.h
XsEuler
struct XsEuler XsEuler
Definition: xseuler.h:227
XsEuler::m_z
XsReal m_z
Stores the z component of the euler triplet.
Definition: xseuler.h:215
XsMath_zero
XSMATHCONST XsReal XsMath_zero
0
Definition: xsmath.h:150
XsEuler::XsEuler_destruct
void XsEuler_destruct(XsEuler *thisPtr)
Clears all angles in the XsEuler object by setting them to 0.
Definition: xseuler.c:85
XsEuler::m_yaw
XsReal m_yaw
Stores the yaw component of the euler triplet.
Definition: xseuler.h:221
XsEuler::XsEuler_fromQuaternion
void XsEuler_fromQuaternion(XsEuler *thisPtr, const XsQuaternion *quat)
Get an euler angle representation of the quaternion.
Definition: xseuler.c:103
XSTYPES_DLL_API
#define XSTYPES_DLL_API
Definition: xstypesconfig.h:65
XsEuler
Contains Euler Angle data and conversion from Quaternion.
Definition: xseuler.h:92
XsEuler::m_roll
XsReal m_roll
Stores the roll component of the euler triplet.
Definition: xseuler.h:219
XsEuler::m_y
XsReal m_y
Stores the y component of the euler triplet.
Definition: xseuler.h:214
XsEuler::XsEuler_empty
int XsEuler_empty(const XsEuler *thisPtr)
Returns true if all angles in this object are zero.
Definition: xseuler.c:95


xsens_mti_driver
Author(s):
autogenerated on Sun Sep 3 2023 02:43:20