All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
quatf.h
Go to the documentation of this file.
1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
25 // This file is generated by a script. Do not edit directly. Edit the
26 // quat.template.h file to make changes.
27 
28 #ifndef GF_QUATF_H
29 #define GF_QUATF_H
30 
33 
34 #include "pxr/pxr.h"
35 #include "pxr/base/gf/api.h"
36 #include "pxr/base/gf/declare.h"
37 #include "pxr/base/gf/vec3f.h"
38 #include "pxr/base/gf/traits.h"
39 
40 #include <boost/functional/hash.hpp>
41 
42 #include <iosfwd>
43 
44 PXR_NAMESPACE_OPEN_SCOPE
45 
46 template <>
47 struct GfIsGfQuat<class GfQuatf> { static const bool value = true; };
48 
49 
51 float GfDot(const GfQuatf& q1, const GfQuatf& q2);
52 
53 
60 class GfQuatf
61 {
62  public:
63  typedef float ScalarType;
64  typedef GfVec3f ImaginaryType;
65 
67  GfQuatf() {}
68 
76  explicit GfQuatf (float realVal) : _imaginary(0), _real(realVal) {}
77 
79  GfQuatf(float real, float i, float j, float k)
80  : _imaginary(i, j, k), _real(real)
81  {
82  }
83 
85  GfQuatf(float real, const GfVec3f &imaginary)
86  : _imaginary(imaginary), _real(real)
87  {
88  }
89 
91  GF_API
92  explicit GfQuatf(class GfQuatd const &other);
94  GF_API
95  GfQuatf(class GfQuath const &other);
96 
99  static GfQuatf GetIdentity() { return GfQuatf(1.0); }
100 
102  float GetReal() const { return _real; }
103 
105  void SetReal(float real) { _real = real; }
106 
108  const GfVec3f &GetImaginary() const { return _imaginary; }
109 
111  void SetImaginary(const GfVec3f &imaginary) {
112  _imaginary = imaginary;
113  }
114 
116  void SetImaginary(float i, float j, float k) {
117  _imaginary.Set(i, j, k);
118  }
119 
121  float GetLength() const { return GfSqrt(_GetLengthSquared()); }
122 
125  GfQuatf
126  GetNormalized(float eps = GF_MIN_VECTOR_LENGTH) const {
127  GfQuatf ret(*this);
128  ret.Normalize(eps);
129  return ret;
130  }
131 
135  GF_API
136  float Normalize(float eps = GF_MIN_VECTOR_LENGTH);
137 
141  return GfQuatf(GetReal(), -GetImaginary());
142  }
143 
146  GfQuatf GetInverse() const {
147  return GetConjugate() / _GetLengthSquared();
148  }
149 
151  friend inline size_t hash_value(const GfQuatf &q) {
152  size_t h = boost::hash<ScalarType>()(q.GetReal());
153  boost::hash_combine(h, q.GetImaginary());
154  return h;
155  }
156 
158  GfQuatf operator-() const {
159  return GfQuatf(-GetReal(), -GetImaginary());
160  }
161 
164  bool operator==(const GfQuatf &q) const {
165  return (GetReal() == q.GetReal() &&
166  GetImaginary() == q.GetImaginary());
167  }
168 
171  bool operator!=(const GfQuatf &q) const {
172  return !(*this == q);
173  }
174 
176  GF_API
177  GfQuatf &operator *=(const GfQuatf &q);
178 
180  GfQuatf &operator *=(float s) {
181  _real *= s;
182  _imaginary *= s;
183  return *this;
184  }
185 
187  GfQuatf &operator /=(float s) {
188  _real /= s;
189  _imaginary /= s;
190  return *this;
191  }
192 
195  _real += q._real;
196  _imaginary += q._imaginary;
197  return *this;
198  }
199 
202  _real -= q._real;
203  _imaginary -= q._imaginary;
204  return *this;
205  }
206 
208  friend GfQuatf
209  operator +(const GfQuatf &q1, const GfQuatf &q2) {
210  return GfQuatf(q1) += q2;
211  }
212 
214  friend GfQuatf
215  operator -(const GfQuatf &q1, const GfQuatf &q2) {
216  return GfQuatf(q1) -= q2;
217  }
218 
220  friend GfQuatf
221  operator *(const GfQuatf &q1, const GfQuatf &q2) {
222  return GfQuatf(q1) *= q2;
223  }
224 
226  friend GfQuatf
227  operator *(const GfQuatf &q, float s) {
228  return GfQuatf(q) *= s;
229  }
230 
232  friend GfQuatf
233  operator *(float s, const GfQuatf &q) {
234  return GfQuatf(q) *= s;
235  }
236 
238  friend GfQuatf
239  operator /(const GfQuatf &q, float s) {
240  return GfQuatf(q) /= s;
241  }
242 
243  private:
245  GfVec3f _imaginary;
246 
248  float _real;
249 
251  float
252  _GetLengthSquared() const {
253  return GfDot(*this, *this);
254  }
255 };
256 
261 GF_API GfQuatf
262 GfSlerp(double alpha, const GfQuatf& q0, const GfQuatf& q1);
263 
264 GF_API GfQuatf
265 GfSlerp(const GfQuatf& q0, const GfQuatf& q1, double alpha);
266 
267 inline float
268 GfDot(GfQuatf const &q1, GfQuatf const &q2) {
269  return GfDot(q1.GetImaginary(), q2.GetImaginary()) +
270  q1.GetReal()*q2.GetReal();
271 }
272 
275 GF_API std::ostream& operator<<(std::ostream &, GfQuatf const &);
276 
277 PXR_NAMESPACE_CLOSE_SCOPE
278 
279 #endif // GF_QUATF_H
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients...
Definition: quath.h:61
GfQuatf GetNormalized(float eps=GF_MIN_VECTOR_LENGTH) const
length of this quaternion is smaller than eps, return the identity quaternion.
Definition: quatf.h:126
Basic type for a vector of 3 float components.
Definition: vec3f.h:63
bool operator!=(const GfQuatf &q) const
Component-wise quaternion inequality test.
Definition: quatf.h:171
float GetReal() const
Return the real coefficient.
Definition: quatf.h:102
GfQuatf operator-() const
Component-wise negation.
Definition: quatf.h:158
void SetImaginary(float i, float j, float k)
Set the imaginary coefficients.
Definition: quatf.h:116
GfQuatf & operator-=(const GfQuatf &q)
Component-wise unary difference operator.
Definition: quatf.h:201
bool operator==(const GfQuatf &q) const
Component-wise quaternion equality test.
Definition: quatf.h:164
float GetLength() const
Return geometric length of this quaternion.
Definition: quatf.h:121
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients...
Definition: quatf.h:60
static GfQuatf GetIdentity()
Return the identity quaternion, with real coefficient 1 and an imaginary coefficients all zero...
Definition: quatf.h:99
friend GfQuatf operator*(const GfQuatf &q1, const GfQuatf &q2)
Returns the product of quaternions q1 and q2.
Definition: quatf.h:221
GF_API GfQuatd GfSlerp(double alpha, const GfQuatd &q0, const GfQuatd &q1)
Spherically linearly interpolate between q0 and q1.
void SetReal(float real)
Set the real coefficient.
Definition: quatf.h:105
GfQuatf(float real, float i, float j, float k)
Initialize the real and imaginary coefficients.
Definition: quatf.h:79
GfQuatf & operator+=(const GfQuatf &q)
Add quaternion q to this quaternion.
Definition: quatf.h:194
GF_API float Normalize(float eps=GF_MIN_VECTOR_LENGTH)
Normalizes this quaternion in place to unit length, returning the length before normalization.
void SetImaginary(const GfVec3f &imaginary)
Set the imaginary coefficients.
Definition: quatf.h:111
GfQuatf()
Default constructor leaves the quaternion undefined.
Definition: quatf.h:67
GfVec3f & Set(float s0, float s1, float s2)
Set all elements with passed arguments.
Definition: vec3f.h:130
friend size_t hash_value(const GfQuatf &q)
Hash.
Definition: quatf.h:151
double GfSqrt(double f)
Return sqrt(f).
Definition: math.h:77
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].
GfQuatf & operator/=(float s)
Divide this quaternion&#39;s coefficients by s.
Definition: quatf.h:187
A metafunction with a static const bool member &#39;value&#39; that is true for GfQuat types and false for al...
Definition: traits.h:45
GfQuatf GetInverse() const
Return this quaternion&#39;s inverse, or reciprocal.
Definition: quatf.h:146
const GfVec3f & GetImaginary() const
Return the imaginary coefficient.
Definition: quatf.h:108
friend GfQuatf operator+(const GfQuatf &q1, const GfQuatf &q2)
Component-wise binary sum operator.
Definition: quatf.h:209
GfQuatf(float realVal)
Initialize the real coefficient to realVal and the imaginary coefficients to zero.
Definition: quatf.h:76
GfQuatf GetConjugate() const
Return this quaternion&#39;s conjugate, which is the quaternion with the same real coefficient and negate...
Definition: quatf.h:140
GfQuatf(float real, const GfVec3f &imaginary)
Initialize the real and imaginary coefficients.
Definition: quatf.h:85
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients...
Definition: quatd.h:60
GF_API GfQuatf & operator*=(const GfQuatf &q)
Post-multiply quaternion q into this quaternion.
friend GfQuatf operator/(const GfQuatf &q, float s)
Returns the product of quaternion q and scalar 1 / s.
Definition: quatf.h:239
#define GF_MIN_VECTOR_LENGTH
This constant is used to determine whether the length of a vector is too small to handle accurately...
Definition: limits.h:34
GfHalf GfDot(GfHalf a, GfHalf b)
Returns the dot (inner) product of two vectors.
Definition: half.h:55