Loading...
Searching...
No Matches
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:487
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