This document is for a version of USD that is under development. See this page for the current release.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
quath.h
Go to the documentation of this file.
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
8// This file is generated by a script. Do not edit directly. Edit the
9// quat.template.h file to make changes.
10
11#ifndef PXR_BASE_GF_QUATH_H
12#define PXR_BASE_GF_QUATH_H
13
16
17#include "pxr/pxr.h"
18#include "pxr/base/gf/api.h"
19#include "pxr/base/gf/declare.h"
20#include "pxr/base/gf/vec3h.h"
21#include "pxr/base/gf/traits.h"
22#include "pxr/base/gf/half.h"
23#include "pxr/base/tf/hash.h"
24
25#include <iosfwd>
26
27PXR_NAMESPACE_OPEN_SCOPE
28
29template <>
30struct GfIsGfQuat<class GfQuath> { static const bool value = true; };
31
32
34GfHalf GfDot(const GfQuath& q1, const GfQuath& q2);
35
36
44{
45 public:
46 typedef GfHalf ScalarType;
47 typedef GfVec3h ImaginaryType;
48
51
59 explicit GfQuath (GfHalf realVal) : _imaginary(0), _real(realVal) {}
60
63 : _imaginary(i, j, k), _real(real)
64 {
65 }
66
68 GfQuath(GfHalf real, const GfVec3h &imaginary)
69 : _imaginary(imaginary), _real(real)
70 {
71 }
72
74 GF_API
75 explicit GfQuath(class GfQuatd const &other);
77 GF_API
78 explicit GfQuath(class GfQuatf const &other);
79
82 static GfQuath GetZero() { return GfQuath(0.0); }
83
86 static GfQuath GetIdentity() { return GfQuath(1.0); }
87
89 GfHalf GetReal() const { return _real; }
90
92 void SetReal(GfHalf real) { _real = real; }
93
95 const GfVec3h &GetImaginary() const { return _imaginary; }
96
98 void SetImaginary(const GfVec3h &imaginary) {
99 _imaginary = imaginary;
100 }
101
104 _imaginary.Set(i, j, k);
105 }
106
108 GfHalf GetLength() const { return GfSqrt(_GetLengthSquared()); }
109
112 GfQuath
114 GfQuath ret(*this);
115 ret.Normalize(eps);
116 return ret;
117 }
118
122 GF_API
124
128 return GfQuath(GetReal(), -GetImaginary());
129 }
130
134 return GetConjugate() / _GetLengthSquared();
135 }
136
144 GF_API
145 GfVec3h Transform(const GfVec3h& point) const;
146
148 friend inline size_t hash_value(const GfQuath &q) {
149 return TfHash::Combine(q.GetReal(), q.GetImaginary());
150 }
151
154 return GfQuath(-GetReal(), -GetImaginary());
155 }
156
159 bool operator==(const GfQuath &q) const {
160 return (GetReal() == q.GetReal() &&
161 GetImaginary() == q.GetImaginary());
162 }
163
166 bool operator!=(const GfQuath &q) const {
167 return !(*this == q);
168 }
169
171 GF_API
173
176 _real *= s;
177 _imaginary *= s;
178 return *this;
179 }
180
183 _real /= s;
184 _imaginary /= s;
185 return *this;
186 }
187
190 _real += q._real;
191 _imaginary += q._imaginary;
192 return *this;
193 }
194
197 _real -= q._real;
198 _imaginary -= q._imaginary;
199 return *this;
200 }
201
203 friend GfQuath
204 operator +(const GfQuath &q1, const GfQuath &q2) {
205 return GfQuath(q1) += q2;
206 }
207
209 friend GfQuath
210 operator -(const GfQuath &q1, const GfQuath &q2) {
211 return GfQuath(q1) -= q2;
212 }
213
215 friend GfQuath
216 operator *(const GfQuath &q1, const GfQuath &q2) {
217 return GfQuath(q1) *= q2;
218 }
219
221 friend GfQuath
222 operator *(const GfQuath &q, GfHalf s) {
223 return GfQuath(q) *= s;
224 }
225
227 friend GfQuath
228 operator *(GfHalf s, const GfQuath &q) {
229 return GfQuath(q) *= s;
230 }
231
233 friend GfQuath
234 operator /(const GfQuath &q, GfHalf s) {
235 return GfQuath(q) /= s;
236 }
237
238 private:
240 GfVec3h _imaginary;
241
243 GfHalf _real;
244
246 GfHalf
247 _GetLengthSquared() const {
248 return GfDot(*this, *this);
249 }
250};
251
256GF_API GfQuath
257GfSlerp(double alpha, const GfQuath& q0, const GfQuath& q1);
258
259GF_API GfQuath
260GfSlerp(const GfQuath& q0, const GfQuath& q1, double alpha);
261
262inline GfHalf
263GfDot(GfQuath const &q1, GfQuath const &q2) {
264 return GfDot(q1.GetImaginary(), q2.GetImaginary()) +
265 q1.GetReal()*q2.GetReal();
266}
267
270GF_API std::ostream& operator<<(std::ostream &, GfQuath const &);
271
272PXR_NAMESPACE_CLOSE_SCOPE
273
274#endif // PXR_BASE_GF_QUATH_H
Declares Gf types.
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quatd.h:43
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quatf.h:43
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quath.h:44
GfQuath(GfHalf real, GfHalf i, GfHalf j, GfHalf k)
Initialize the real and imaginary coefficients.
Definition: quath.h:62
void SetImaginary(const GfVec3h &imaginary)
Set the imaginary coefficients.
Definition: quath.h:98
GfQuath operator-() const
Component-wise negation.
Definition: quath.h:153
friend size_t hash_value(const GfQuath &q)
Hash.
Definition: quath.h:148
GfHalf GetReal() const
Return the real coefficient.
Definition: quath.h:89
friend GfQuath operator/(const GfQuath &q, GfHalf s)
Returns the product of quaternion q and scalar 1 / s.
Definition: quath.h:234
GF_API GfHalf Normalize(GfHalf eps=GF_MIN_VECTOR_LENGTH)
Normalizes this quaternion in place to unit length, returning the length before normalization.
GfHalf GetLength() const
Return geometric length of this quaternion.
Definition: quath.h:108
GfQuath GetInverse() const
Return this quaternion's inverse, or reciprocal.
Definition: quath.h:133
friend GfQuath operator+(const GfQuath &q1, const GfQuath &q2)
Component-wise binary sum operator.
Definition: quath.h:204
GfQuath()
Default constructor leaves the quaternion undefined.
Definition: quath.h:50
GfQuath & operator+=(const GfQuath &q)
Add quaternion q to this quaternion.
Definition: quath.h:189
GfQuath GetConjugate() const
Return this quaternion's conjugate, which is the quaternion with the same real coefficient and negate...
Definition: quath.h:127
void SetReal(GfHalf real)
Set the real coefficient.
Definition: quath.h:92
friend GfQuath operator*(const GfQuath &q1, const GfQuath &q2)
Returns the product of quaternions q1 and q2.
Definition: quath.h:216
GF_API GfQuath & operator*=(const GfQuath &q)
Post-multiply quaternion q into this quaternion.
bool operator==(const GfQuath &q) const
Component-wise quaternion equality test.
Definition: quath.h:159
GfQuath & operator/=(GfHalf s)
Divide this quaternion's coefficients by s.
Definition: quath.h:182
GF_API GfQuath(class GfQuatd const &other)
Construct from GfQuatd.
const GfVec3h & GetImaginary() const
Return the imaginary coefficient.
Definition: quath.h:95
GfQuath GetNormalized(GfHalf eps=GF_MIN_VECTOR_LENGTH) const
length of this quaternion is smaller than eps, return the identity quaternion.
Definition: quath.h:113
bool operator!=(const GfQuath &q) const
Component-wise quaternion inequality test.
Definition: quath.h:166
GF_API GfVec3h Transform(const GfVec3h &point) const
Transform the GfVec3h point.
GF_API GfQuath(class GfQuatf const &other)
Construct from GfQuatf.
GfQuath(GfHalf real, const GfVec3h &imaginary)
Initialize the real and imaginary coefficients.
Definition: quath.h:68
void SetImaginary(GfHalf i, GfHalf j, GfHalf k)
Set the imaginary coefficients.
Definition: quath.h:103
static GfQuath GetZero()
Return the zero quaternion, with real coefficient 0 and an imaginary coefficients all zero.
Definition: quath.h:82
GfQuath(GfHalf realVal)
Initialize the real coefficient to realVal and the imaginary coefficients to zero.
Definition: quath.h:59
GfQuath & operator-=(const GfQuath &q)
Component-wise unary difference operator.
Definition: quath.h:196
static GfQuath GetIdentity()
Return the identity quaternion, with real coefficient 1 and an imaginary coefficients all zero.
Definition: quath.h:86
Basic type for a vector of 3 GfHalf components.
Definition: vec3h.h:47
GfVec3h & Set(GfHalf s0, GfHalf s1, GfHalf s2)
Set all elements with passed arguments.
Definition: vec3h.h:113
static size_t Combine(Args &&... args)
Produce a hash code by combining the hash codes of several objects.
Definition: hash.h:475
double GfSqrt(double f)
Return sqrt(f).
Definition: math.h:187
#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:17
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].
This header serves to simply bring in the half float datatype and provide a hash_value function.
pxr_half::half GfHalf
A 16-bit floating point data type.
Definition: half.h:24
GfHalf GfDot(const GfQuath &q1, const GfQuath &q2)
Return the dot (inner) product of two quaternions.
Definition: quath.h:263
GF_API GfQuath GfSlerp(double alpha, const GfQuath &q0, const GfQuath &q1)
Spherically linearly interpolate between q0 and q1.
A metafunction with a static const bool member 'value' that is true for GfQuat types and false for al...
Definition: traits.h:30