KJB
|
#include <g_quaternion.h>
Public Types | |
enum | Euler_mode { XESS = 0, XYXS, XEDS, XYZS, XOSS, XZXS, XODS, XZYS, YESS, YZYS, YEDS, YZXS, YOSS, YXYS, YODS, YXZS, ZESS, ZXZS, ZEDS, ZXYS, ZOSS, ZYZS, ZODS, ZYXS, XESR, XYXR, XEDR, ZYXR, XOSR, XZXR, XODR, YZXR, YESR, YZYR, YEDR, XZYR, YOSR, YXYR, YODR, ZXYR, ZESR, ZXZR, ZEDR, YXZR, ZOSR, ZYZR, ZODR, XYZR } |
enum | Euler_axis { EulX = 0, EulY = 1, EulZ = 2 } |
enum | Euler_parity { EulParEven = 0, EulParOdd = 1 } |
enum | Euler_repeat { EulRepNo = 0, EulRepYes = 1 } |
enum | Euler_frame { EulFrmS = 0, EulFrmR = 1 } |
Public Member Functions | |
Quaternion () | |
Quaternion (double x, double y, double z, double w) | |
Quaternion (double phi, double theta, double psi, Euler_mode mode=DEFAULT_EULER_MODE) | |
Quaternion (const Matrix &rotation_matrix) | |
Quaternion (const Vector &x, const Vector &y, const Vector &z) | |
Quaternion (const Vector &axis, double angle) | |
Quaternion (const Quaternion &) | |
Quaternion | clone () const |
void | swap (Self &other) |
Quaternion & | init_identity () |
bool | is_identity () const |
const Matrix & | get_rotation_matrix () const |
const Vector & | get_axis () const |
Vector | get_axis_angle () const |
double | get_angle () const |
const Vector & | get_euler_angles () const |
returns vector [phi, theta, psi] More... | |
Vector | get_imag () const |
returns vector [x, y, z] More... | |
double | get_real () const |
returns w More... | |
Quaternion & | set_rotation_matrix (const Matrix &) |
Quaternion & | set_axis_angle (const Vector &, double angle) |
Quaternion & | set_axis_angle (const Vector &axis_angle) |
Quaternion & | set_from_directions (const Vector &d1, const Vector &d2) |
Find quaternion that rotates vector d1 to vector d2 in the smallest angle. More... | |
Quaternion & | set_from_directions (const Vector3 &d1, const Vector3 &d2) |
Quaternion & | set_euler_angles (double phi, double theta, double psi) |
Quaternion & | set_euler_phi (double phi) |
Quaternion & | set_euler_theta (double theta) |
Quaternion & | set_euler_psi (double psi) |
Quaternion & | set_euler_mode (Euler_mode m) |
Euler_mode | get_euler_mode () const |
Vector | rotate (const Vector &v) const |
Vector3 | rotate (const Vector3 &v) const |
Quaternion | conj () const |
double | norm (unsigned int l=2) const |
compute the L-* norm More... | |
double | magnitude () const |
double | magnitude_squared () const |
Quaternion & | operator= (const Quaternion &) |
Quaternion & | operator*= (const Quaternion &) |
Quaternion & | operator/= (const Quaternion &) |
Quaternion & | operator+= (const Quaternion &) |
Quaternion & | operator-= (const Quaternion &) |
This is simple 4-vector subtraction. If you want to invert a rotation, don't use this–multiply by the conugate instead (or use the division operator (untested?)) More... | |
Quaternion & | operator*= (double) |
This is used in computing the mean, and in normalization. More... | |
Quaternion & | operator/= (double) |
Quaternion | operator* (const Quaternion &) const |
Quaternion | operator/ (const Quaternion &) const |
Quaternion | operator+ (const Quaternion &q) const |
Quaternion | operator- (const Quaternion &q) const |
bool | operator== (const Quaternion &) const |
bool | operator!= (const Quaternion &) const |
Static Public Member Functions | |
static void | set_default_euler_mode (Euler_mode m) |
static Euler_mode | get_default_euler_mode () |
static void | set_gimbal_lock_epsilon (float e) |
static float | get_gimbal_lock_epsilon () |
static void | set_epsilon (float e) |
static float | get_epsilon () |
Public Attributes | |
bool | _gimbal_lock |
Static Public Attributes | |
static const Euler_axis | EulSafe [4] = {EulX, EulY, EulZ, EulX} |
static const Euler_axis | EulNext [4] = {EulY, EulZ, EulX, EulY} |
Friends | |
Quaternion | slerp (const Quaternion &q1, const Quaternion &q2, double t) |
Quaternion | slerp2 (const Quaternion &q1, const Quaternion &q2, double t) |
Quaternion | nlerp (const Quaternion &q1, const Quaternion &q2, double t) |
std::ostream & | operator<< (std::ostream &out, const Quaternion &q) |
kjb::Quaternion::Quaternion | ( | ) |
kjb::Quaternion::Quaternion | ( | double | x, |
double | y, | ||
double | z, | ||
double | w | ||
) |
Construct a quaternion directly from its components.
kjb::Quaternion::Quaternion | ( | double | phi, |
double | theta, | ||
double | psi, | ||
Euler_mode | mode = DEFAULT_EULER_MODE |
||
) |
kjb::Quaternion::Quaternion | ( | const Matrix & | rotation_matrix | ) |
Set rotation matrix from new x, y, z vectors
kjb::Quaternion::Quaternion | ( | const Vector & | axis, |
double | angle | ||
) |
kjb::Quaternion::Quaternion | ( | const Quaternion & | src | ) |
Quaternion kjb::Quaternion::clone | ( | ) | const |
Quaternion kjb::Quaternion::conj | ( | ) | const |
double kjb::Quaternion::get_angle | ( | ) | const |
const Vector & kjb::Quaternion::get_axis | ( | ) | const |
Vector kjb::Quaternion::get_axis_angle | ( | ) | const |
|
static |
|
static |
const Vector & kjb::Quaternion::get_euler_angles | ( | ) | const |
returns vector [phi, theta, psi]
Quaternion::Euler_mode kjb::Quaternion::get_euler_mode | ( | ) | const |
|
static |
Vector kjb::Quaternion::get_imag | ( | ) | const |
returns vector [x, y, z]
double kjb::Quaternion::get_real | ( | ) | const |
returns w
const Matrix & kjb::Quaternion::get_rotation_matrix | ( | ) | const |
Quaternion & kjb::Quaternion::init_identity | ( | ) |
|
inline |
|
inline |
|
inline |
double kjb::Quaternion::norm | ( | unsigned int | l = 2 | ) | const |
compute the L-* norm
bool kjb::Quaternion::operator!= | ( | const Quaternion & | op2 | ) | const |
Quaternion kjb::Quaternion::operator* | ( | const Quaternion & | op_2 | ) | const |
Quaternion & kjb::Quaternion::operator*= | ( | const Quaternion & | q | ) |
Quaternion & kjb::Quaternion::operator*= | ( | double | x | ) |
This is used in computing the mean, and in normalization.
|
inline |
Quaternion & kjb::Quaternion::operator+= | ( | const Quaternion & | q | ) |
|
inline |
Quaternion & kjb::Quaternion::operator-= | ( | const Quaternion & | q | ) |
This is simple 4-vector subtraction. If you want to invert a rotation, don't use this–multiply by the conugate instead (or use the division operator (untested?))
Quaternion kjb::Quaternion::operator/ | ( | const Quaternion & | op_2 | ) | const |
Quaternion & kjb::Quaternion::operator/= | ( | const Quaternion & | q | ) |
Quaternion & kjb::Quaternion::operator/= | ( | double | x | ) |
Quaternion & kjb::Quaternion::operator= | ( | const Quaternion & | src | ) |
bool kjb::Quaternion::operator== | ( | const Quaternion & | op2 | ) | const |
Quaternion & kjb::Quaternion::set_axis_angle | ( | const Vector & | axis, |
double | angle | ||
) |
Quaternion & kjb::Quaternion::set_axis_angle | ( | const Vector & | axis_angle | ) |
Set axis/angle from 3-vector, where magnitude is angle, and direction is axis.
|
static |
|
static |
Quaternion & kjb::Quaternion::set_euler_angles | ( | double | phi, |
double | theta, | ||
double | psi | ||
) |
Quaternion & kjb::Quaternion::set_euler_mode | ( | Euler_mode | m | ) |
Quaternion & kjb::Quaternion::set_euler_phi | ( | double | phi | ) |
Set first euler rotation
Quaternion & kjb::Quaternion::set_euler_psi | ( | double | psi | ) |
Set first euler rotation
Quaternion & kjb::Quaternion::set_euler_theta | ( | double | theta | ) |
Set second euler rotation
Quaternion & kjb::Quaternion::set_from_directions | ( | const Vector & | d1, |
const Vector & | d2 | ||
) |
Find quaternion that rotates vector d1 to vector d2 in the smallest angle.
Find quaternion that rotates vector d1 to vector d2 in the smallest angle.
Quaternion & kjb::Quaternion::set_from_directions | ( | const Vector3 & | d1, |
const Vector3 & | d2 | ||
) |
|
static |
Quaternion & kjb::Quaternion::set_rotation_matrix | ( | const Matrix & | rotation_matrix | ) |
void kjb::Quaternion::swap | ( | Self & | other | ) |
|
friend |
Normalized linear interpolation of two quaternions. More efficient than slerp, but rotation rate is non-constant.
|
friend |
|
friend |
Spherical linear interpolation between two quaternions
|
friend |
An alternative implementation of spherical linear interpolation
|
mutable |
|
static |
|
static |