Loading...
Searching...
No Matches
quath.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 PXR_BASE_GF_QUATH_H
29#define PXR_BASE_GF_QUATH_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/vec3h.h"
38#include "pxr/base/gf/traits.h"
39#include "pxr/base/gf/half.h"
40#include "pxr/base/tf/hash.h"
41
42#include <iosfwd>
43
44PXR_NAMESPACE_OPEN_SCOPE
45
46template <>
47struct GfIsGfQuat<class GfQuath> { static const bool value = true; };
48
49
51GfHalf GfDot(const GfQuath& q1, const GfQuath& q2);
52
53
61{
62 public:
63 typedef GfHalf ScalarType;
64 typedef GfVec3h ImaginaryType;
65
68
76 explicit GfQuath (GfHalf realVal) : _imaginary(0), _real(realVal) {}
77
80 : _imaginary(i, j, k), _real(real)
81 {
82 }
83
85 GfQuath(GfHalf real, const GfVec3h &imaginary)
86 : _imaginary(imaginary), _real(real)
87 {
88 }
89
91 GF_API
92 explicit GfQuath(class GfQuatd const &other);
94 GF_API
95 explicit GfQuath(class GfQuatf const &other);
96
99 static GfQuath GetZero() { return GfQuath(0.0); }
100
103 static GfQuath GetIdentity() { return GfQuath(1.0); }
104
106 GfHalf GetReal() const { return _real; }
107
109 void SetReal(GfHalf real) { _real = real; }
110
112 const GfVec3h &GetImaginary() const { return _imaginary; }
113
115 void SetImaginary(const GfVec3h &imaginary) {
116 _imaginary = imaginary;
117 }
118
121 _imaginary.Set(i, j, k);
122 }
123
125 GfHalf GetLength() const { return GfSqrt(_GetLengthSquared()); }
126
129 GfQuath
131 GfQuath ret(*this);
132 ret.Normalize(eps);
133 return ret;
134 }
135
139 GF_API
141
145 return GfQuath(GetReal(), -GetImaginary());
146 }
147
151 return GetConjugate() / _GetLengthSquared();
152 }
153
161 GF_API
162 GfVec3h Transform(const GfVec3h& point) const;
163
165 friend inline size_t hash_value(const GfQuath &q) {
166 return TfHash::Combine(q.GetReal(), q.GetImaginary());
167 }
168
171 return GfQuath(-GetReal(), -GetImaginary());
172 }
173
176 bool operator==(const GfQuath &q) const {
177 return (GetReal() == q.GetReal() &&
178 GetImaginary() == q.GetImaginary());
179 }
180
183 bool operator!=(const GfQuath &q) const {
184 return !(*this == q);
185 }
186
188 GF_API
190
193 _real *= s;
194 _imaginary *= s;
195 return *this;
196 }
197
200 _real /= s;
201 _imaginary /= s;
202 return *this;
203 }
204
207 _real += q._real;
208 _imaginary += q._imaginary;
209 return *this;
210 }
211
214 _real -= q._real;
215 _imaginary -= q._imaginary;
216 return *this;
217 }
218
220 friend GfQuath
221 operator +(const GfQuath &q1, const GfQuath &q2) {
222 return GfQuath(q1) += q2;
223 }
224
226 friend GfQuath
227 operator -(const GfQuath &q1, const GfQuath &q2) {
228 return GfQuath(q1) -= q2;
229 }
230
232 friend GfQuath
233 operator *(const GfQuath &q1, const GfQuath &q2) {
234 return GfQuath(q1) *= q2;
235 }
236
238 friend GfQuath
239 operator *(const GfQuath &q, GfHalf s) {
240 return GfQuath(q) *= s;
241 }
242
244 friend GfQuath
245 operator *(GfHalf s, const GfQuath &q) {
246 return GfQuath(q) *= s;
247 }
248
250 friend GfQuath
251 operator /(const GfQuath &q, GfHalf s) {
252 return GfQuath(q) /= s;
253 }
254
255 private:
257 GfVec3h _imaginary;
258
260 GfHalf _real;
261
263 GfHalf
264 _GetLengthSquared() const {
265 return GfDot(*this, *this);
266 }
267};
268
273GF_API GfQuath
274GfSlerp(double alpha, const GfQuath& q0, const GfQuath& q1);
275
276GF_API GfQuath
277GfSlerp(const GfQuath& q0, const GfQuath& q1, double alpha);
278
279inline GfHalf
280GfDot(GfQuath const &q1, GfQuath const &q2) {
281 return GfDot(q1.GetImaginary(), q2.GetImaginary()) +
282 q1.GetReal()*q2.GetReal();
283}
284
287GF_API std::ostream& operator<<(std::ostream &, GfQuath const &);
288
289PXR_NAMESPACE_CLOSE_SCOPE
290
291#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:60
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quatf.h:60
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quath.h:61
GfQuath(GfHalf real, GfHalf i, GfHalf j, GfHalf k)
Initialize the real and imaginary coefficients.
Definition: quath.h:79
void SetImaginary(const GfVec3h &imaginary)
Set the imaginary coefficients.
Definition: quath.h:115
GfQuath operator-() const
Component-wise negation.
Definition: quath.h:170
friend size_t hash_value(const GfQuath &q)
Hash.
Definition: quath.h:165
GfHalf GetReal() const
Return the real coefficient.
Definition: quath.h:106
friend GfQuath operator/(const GfQuath &q, GfHalf s)
Returns the product of quaternion q and scalar 1 / s.
Definition: quath.h:251
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:125
GfQuath GetInverse() const
Return this quaternion's inverse, or reciprocal.
Definition: quath.h:150
friend GfQuath operator+(const GfQuath &q1, const GfQuath &q2)
Component-wise binary sum operator.
Definition: quath.h:221
GfQuath()
Default constructor leaves the quaternion undefined.
Definition: quath.h:67
GfQuath & operator+=(const GfQuath &q)
Add quaternion q to this quaternion.
Definition: quath.h:206
GfQuath GetConjugate() const
Return this quaternion's conjugate, which is the quaternion with the same real coefficient and negate...
Definition: quath.h:144
void SetReal(GfHalf real)
Set the real coefficient.
Definition: quath.h:109
friend GfQuath operator*(const GfQuath &q1, const GfQuath &q2)
Returns the product of quaternions q1 and q2.
Definition: quath.h:233
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:176
GfQuath & operator/=(GfHalf s)
Divide this quaternion's coefficients by s.
Definition: quath.h:199
GF_API GfQuath(class GfQuatd const &other)
Construct from GfQuatd.
const GfVec3h & GetImaginary() const
Return the imaginary coefficient.
Definition: quath.h:112
GfQuath GetNormalized(GfHalf eps=GF_MIN_VECTOR_LENGTH) const
length of this quaternion is smaller than eps, return the identity quaternion.
Definition: quath.h:130
bool operator!=(const GfQuath &q) const
Component-wise quaternion inequality test.
Definition: quath.h:183
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:85
void SetImaginary(GfHalf i, GfHalf j, GfHalf k)
Set the imaginary coefficients.
Definition: quath.h:120
static GfQuath GetZero()
Return the zero quaternion, with real coefficient 0 and an imaginary coefficients all zero.
Definition: quath.h:99
GfQuath(GfHalf realVal)
Initialize the real coefficient to realVal and the imaginary coefficients to zero.
Definition: quath.h:76
GfQuath & operator-=(const GfQuath &q)
Component-wise unary difference operator.
Definition: quath.h:213
static GfQuath GetIdentity()
Return the identity quaternion, with real coefficient 1 and an imaginary coefficients all zero.
Definition: quath.h:103
Basic type for a vector of 3 GfHalf components.
Definition: vec3h.h:64
GfVec3h & Set(GfHalf s0, GfHalf s1, GfHalf s2)
Set all elements with passed arguments.
Definition: vec3h.h:130
static size_t Combine(Args &&... args)
Produce a hash code by combining the hash codes of several objects.
Definition: hash.h:519
double GfSqrt(double f)
Return sqrt(f).
Definition: math.h:80
#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
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:41
GfHalf GfDot(const GfQuath &q1, const GfQuath &q2)
Return the dot (inner) product of two quaternions.
Definition: quath.h:280
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:47