Quat
#include <Imath/ImathQuat.h>
The Quat
class template represents a quaterion
rotation/orientation, with predefined typedefs for float
and
double
.
Example:
#include <Imath/ImathQuat.h>
#include <cassert>
void
quat_example ()
{
Imath::Quatf q (2.0f, 3.0f, 4.0f, 5.0f);
assert (q.r == 2.0f && q.v == Imath::V3f (3.0f, 4.0f, 5.0f));
Imath::Quatf r (1.0f, 0.0f, 0.0f, 1.0f);
assert (r.inverse () == Imath::Quatf (0.5f, 0.0f, 0.0f, -0.5f));
}
-
typedef Quat<float> Imath::Quatf
Quaternion of type float.
-
template<class T>
class Quat
The Quat class implements the quaternion numerical type — you will probably want to use this class to represent orientations in R3 and to convert between various euler angle reps.
You should probably use Imath::Euler<> for that.
Direct access to elements
-
T r
The real part.
-
Vec3<T> v
The imaginary vector.
Constructors
-
inline constexpr Quat() noexcept
Default constructor is the identity quat.
-
inline constexpr Quat(const Quat &q) noexcept
Copy constructor.
-
template<class S>
inline constexpr Quat(const Quat<S> &q) noexcept
Construct from a quaternion of a another base type.
-
inline constexpr Quat(T s, T i, T j, T k) noexcept
Initialize with real part s
and imaginary vector 1(i,j,k)`.
-
inline constexpr Quat(T s, Vec3<T> d) noexcept
Initialize with real part s
and imaginary vector d
-
inline constexpr const Quat<T> &operator=(const Quat<T> &q) noexcept
Assignment.
-
~Quat() noexcept = default
Destructor.
-
static inline constexpr Quat<T> identity() noexcept
The identity quaternion.
Basic Algebra
Note that the operator return values are NOT normalized
-
inline constexpr const Quat<T> &operator*=(const Quat<T> &q) noexcept
Quaternion multiplication.
-
inline constexpr const Quat<T> &operator*=(T t) noexcept
Scalar multiplication: multiply both real and imaginary parts by the given scalar.
-
inline constexpr const Quat<T> &operator/=(const Quat<T> &q) noexcept
Quaterion division, using the inverse()
-
inline constexpr const Quat<T> &operator/=(T t) noexcept
Scalar division: multiply both real and imaginary parts by the given scalar.
-
inline constexpr const Quat<T> &operator+=(const Quat<T> &q) noexcept
Quaternion addition.
-
inline constexpr const Quat<T> &operator-=(const Quat<T> &q) noexcept
Quaternion subtraction.
-
template<class S>
inline constexpr bool operator==(const Quat<S> &q) const noexcept
Equality.
-
template<class S>
inline constexpr bool operator!=(const Quat<S> &q) const noexcept
Inequality.
Query
-
inline constexpr T length() const noexcept
Return the R4 length.
-
inline constexpr T angle() const noexcept
Return the angle of the axis/angle representation.
-
inline constexpr Vec3<T> axis() const noexcept
Return the axis of the axis/angle representation.
-
inline constexpr Matrix33<T> toMatrix33() const noexcept
Return a 3x3 rotation matrix.
-
inline constexpr Matrix44<T> toMatrix44() const noexcept
Return a 4x4 rotation matrix.
-
inline Quat<T> log() const noexcept
Return the logarithm of the quaterion.
-
inline Quat<T> exp() const noexcept
Return the exponent of the quaterion.
Utility Methods
-
inline constexpr Quat<T> &invert() noexcept
Invert in place: this = 1 / this.
- Returns:
const reference to this.
-
inline constexpr Quat<T> inverse() const noexcept
Return 1/this, leaving this unchanged.
-
inline constexpr Quat<T> &normalize() noexcept
Normalize in place.
- Returns:
const reference to this.
-
inline constexpr Quat<T> normalized() const noexcept
Return a normalized quaternion, leaving this unmodified.
-
inline constexpr Vec3<T> rotateVector(const Vec3<T> &original) const noexcept
Rotate the given point by the quaterion.
-
inline constexpr T euclideanInnerProduct(const Quat<T> &q) const noexcept
Return the Euclidean inner product.
-
inline constexpr Quat<T> &setAxisAngle(const Vec3<T> &axis, T radians) noexcept
Set the quaterion to be a rotation around the given axis by the given angle.
- Returns:
const reference to this.
-
inline constexpr Quat<T> &setRotation(const Vec3<T> &fromDirection, const Vec3<T> &toDirection) noexcept
Set the quaternion to be a rotation that transforms the direction vector fromDirection
to toDirection
- Returns:
const reference to this.
Public Types
-
typedef T BaseType
The base type: In templates that accept a parameter V
, you can refer to T
as V::BaseType
Public Functions
-
inline constexpr T &operator[](int index) noexcept
Element access: q[0] is the real part, (q[1],q[2],q[3]) is the imaginary part.
-
inline constexpr T operator[](int index) const noexcept
Element access: q[0] is the real part, (q[1],q[2],q[3]) is the imaginary part.
-
template<class T>
std::ostream &Imath::operator<<(std::ostream &o, const Quat<T> &q)
Stream output as “(r x y z)”.
Copyright © OpenEXR a Series of LF Projects, LLC.
For web site terms of use, trademark policy and other project policies
please see https://lfprojects.org.