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
quatd.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_QUATD_H
12#define PXR_BASE_GF_QUATD_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/vec3d.h"
21#include "pxr/base/gf/traits.h"
22#include "pxr/base/tf/hash.h"
23
24#include <iosfwd>
25
26PXR_NAMESPACE_OPEN_SCOPE
27
28template <>
29struct GfIsGfQuat<class GfQuatd> { static const bool value = true; };
30
31
33double GfDot(const GfQuatd& q1, const GfQuatd& q2);
34
35
43{
44 public:
45 typedef double ScalarType;
46 typedef GfVec3d ImaginaryType;
47
50
58 explicit GfQuatd (double realVal) : _imaginary(0), _real(realVal) {}
59
61 GfQuatd(double real, double i, double j, double k)
62 : _imaginary(i, j, k), _real(real)
63 {
64 }
65
67 GfQuatd(double real, const GfVec3d &imaginary)
68 : _imaginary(imaginary), _real(real)
69 {
70 }
71
73 GF_API
74 GfQuatd(class GfQuatf const &other);
76 GF_API
77 GfQuatd(class GfQuath const &other);
78
81 static GfQuatd GetZero() { return GfQuatd(0.0); }
82
85 static GfQuatd GetIdentity() { return GfQuatd(1.0); }
86
88 double GetReal() const { return _real; }
89
91 void SetReal(double real) { _real = real; }
92
94 const GfVec3d &GetImaginary() const { return _imaginary; }
95
97 void SetImaginary(const GfVec3d &imaginary) {
98 _imaginary = imaginary;
99 }
100
102 void SetImaginary(double i, double j, double k) {
103 _imaginary.Set(i, j, k);
104 }
105
107 double GetLength() const { return GfSqrt(_GetLengthSquared()); }
108
111 GfQuatd
113 GfQuatd ret(*this);
114 ret.Normalize(eps);
115 return ret;
116 }
117
121 GF_API
122 double Normalize(double eps = GF_MIN_VECTOR_LENGTH);
123
127 return GfQuatd(GetReal(), -GetImaginary());
128 }
129
133 return GetConjugate() / _GetLengthSquared();
134 }
135
143 GF_API
144 GfVec3d Transform(const GfVec3d& point) const;
145
147 friend inline size_t hash_value(const GfQuatd &q) {
148 return TfHash::Combine(q.GetReal(), q.GetImaginary());
149 }
150
153 return GfQuatd(-GetReal(), -GetImaginary());
154 }
155
158 bool operator==(const GfQuatd &q) const {
159 return (GetReal() == q.GetReal() &&
160 GetImaginary() == q.GetImaginary());
161 }
162
165 bool operator!=(const GfQuatd &q) const {
166 return !(*this == q);
167 }
168
170 GF_API
172
174 GfQuatd &operator *=(double s) {
175 _real *= s;
176 _imaginary *= s;
177 return *this;
178 }
179
181 GfQuatd &operator /=(double s) {
182 _real /= s;
183 _imaginary /= s;
184 return *this;
185 }
186
189 _real += q._real;
190 _imaginary += q._imaginary;
191 return *this;
192 }
193
196 _real -= q._real;
197 _imaginary -= q._imaginary;
198 return *this;
199 }
200
202 friend GfQuatd
203 operator +(const GfQuatd &q1, const GfQuatd &q2) {
204 return GfQuatd(q1) += q2;
205 }
206
208 friend GfQuatd
209 operator -(const GfQuatd &q1, const GfQuatd &q2) {
210 return GfQuatd(q1) -= q2;
211 }
212
214 friend GfQuatd
215 operator *(const GfQuatd &q1, const GfQuatd &q2) {
216 return GfQuatd(q1) *= q2;
217 }
218
220 friend GfQuatd
221 operator *(const GfQuatd &q, double s) {
222 return GfQuatd(q) *= s;
223 }
224
226 friend GfQuatd
227 operator *(double s, const GfQuatd &q) {
228 return GfQuatd(q) *= s;
229 }
230
232 friend GfQuatd
233 operator /(const GfQuatd &q, double s) {
234 return GfQuatd(q) /= s;
235 }
236
237 private:
239 GfVec3d _imaginary;
240
242 double _real;
243
245 double
246 _GetLengthSquared() const {
247 return GfDot(*this, *this);
248 }
249};
250
255GF_API GfQuatd
256GfSlerp(double alpha, const GfQuatd& q0, const GfQuatd& q1);
257
258GF_API GfQuatd
259GfSlerp(const GfQuatd& q0, const GfQuatd& q1, double alpha);
260
261inline double
262GfDot(GfQuatd const &q1, GfQuatd const &q2) {
263 return GfDot(q1.GetImaginary(), q2.GetImaginary()) +
264 q1.GetReal()*q2.GetReal();
265}
266
269GF_API std::ostream& operator<<(std::ostream &, GfQuatd const &);
270
271PXR_NAMESPACE_CLOSE_SCOPE
272
273#endif // PXR_BASE_GF_QUATD_H
Declares Gf types.
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quatd.h:43
static GfQuatd GetIdentity()
Return the identity quaternion, with real coefficient 1 and an imaginary coefficients all zero.
Definition: quatd.h:85
GfQuatd & operator/=(double s)
Divide this quaternion's coefficients by s.
Definition: quatd.h:181
GfQuatd & operator+=(const GfQuatd &q)
Add quaternion q to this quaternion.
Definition: quatd.h:188
GF_API GfQuatd(class GfQuath const &other)
Implicitly convert from GfQuath.
GfQuatd(double realVal)
Initialize the real coefficient to realVal and the imaginary coefficients to zero.
Definition: quatd.h:58
GfQuatd(double real, double i, double j, double k)
Initialize the real and imaginary coefficients.
Definition: quatd.h:61
GfQuatd GetNormalized(double eps=GF_MIN_VECTOR_LENGTH) const
length of this quaternion is smaller than eps, return the identity quaternion.
Definition: quatd.h:112
GfQuatd(double real, const GfVec3d &imaginary)
Initialize the real and imaginary coefficients.
Definition: quatd.h:67
GF_API GfVec3d Transform(const GfVec3d &point) const
Transform the GfVec3d point.
GfQuatd & operator-=(const GfQuatd &q)
Component-wise unary difference operator.
Definition: quatd.h:195
friend GfQuatd operator*(const GfQuatd &q1, const GfQuatd &q2)
Returns the product of quaternions q1 and q2.
Definition: quatd.h:215
const GfVec3d & GetImaginary() const
Return the imaginary coefficient.
Definition: quatd.h:94
GF_API double Normalize(double eps=GF_MIN_VECTOR_LENGTH)
Normalizes this quaternion in place to unit length, returning the length before normalization.
GfQuatd operator-() const
Component-wise negation.
Definition: quatd.h:152
double GetReal() const
Return the real coefficient.
Definition: quatd.h:88
GfQuatd GetInverse() const
Return this quaternion's inverse, or reciprocal.
Definition: quatd.h:132
bool operator==(const GfQuatd &q) const
Component-wise quaternion equality test.
Definition: quatd.h:158
GfQuatd GetConjugate() const
Return this quaternion's conjugate, which is the quaternion with the same real coefficient and negate...
Definition: quatd.h:126
GF_API GfQuatd & operator*=(const GfQuatd &q)
Post-multiply quaternion q into this quaternion.
void SetImaginary(const GfVec3d &imaginary)
Set the imaginary coefficients.
Definition: quatd.h:97
static GfQuatd GetZero()
Return the zero quaternion, with real coefficient 0 and an imaginary coefficients all zero.
Definition: quatd.h:81
bool operator!=(const GfQuatd &q) const
Component-wise quaternion inequality test.
Definition: quatd.h:165
GF_API GfQuatd(class GfQuatf const &other)
Implicitly convert from GfQuatf.
friend GfQuatd operator/(const GfQuatd &q, double s)
Returns the product of quaternion q and scalar 1 / s.
Definition: quatd.h:233
void SetImaginary(double i, double j, double k)
Set the imaginary coefficients.
Definition: quatd.h:102
friend size_t hash_value(const GfQuatd &q)
Hash.
Definition: quatd.h:147
GfQuatd()
Default constructor leaves the quaternion undefined.
Definition: quatd.h:49
double GetLength() const
Return geometric length of this quaternion.
Definition: quatd.h:107
void SetReal(double real)
Set the real coefficient.
Definition: quatd.h:91
friend GfQuatd operator+(const GfQuatd &q1, const GfQuatd &q2)
Component-wise binary sum operator.
Definition: quatd.h:203
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
Basic type for a vector of 3 double components.
Definition: vec3d.h:46
GfVec3d & Set(double s0, double s1, double s2)
Set all elements with passed arguments.
Definition: vec3d.h:112
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].
GF_API GfQuatd GfSlerp(double alpha, const GfQuatd &q0, const GfQuatd &q1)
Spherically linearly interpolate between q0 and q1.
double GfDot(const GfQuatd &q1, const GfQuatd &q2)
Return the dot (inner) product of two quaternions.
Definition: quatd.h:262
A metafunction with a static const bool member 'value' that is true for GfQuat types and false for al...
Definition: traits.h:30