[an error occurred while processing this directive] [an error occurred while processing this directive]
[an error occurred while processing this directive] Skip to the content of the web site.The C++ classes Quaternion<double>, Quaternion<double>, and Quaternion<float> represent floating-point quaternions of the form z = a + ib + jc + kd. The symbols i, j, and k follow the multiplication rules i2 = j2 = k2 = ijk = -1. Consequently, multiplication is not commutative.
Throughout this document, the variable z is used to represent *this object. The template variable T represents the field of the coefficients.
There are two constructors
Quaternion( T a = 0 ); Quaternion( T a, T b, T c, T d );
which create the quaternion a + 0i + 0j + 0k and a + ib + jc + kd, respectively.
There are five static constants defined in each class:
ZERO | 0 |
ONE | 1 |
I | i |
J | j |
K | k |
The constants may be accessed through the array UNITS[4] = {ONE, I, J, K}.
Each of the real-valued member functions has the prototype T f() const; and has a corresponding procedural function T f( const Quaternion<T> );.
real | imag_i | imag_j | imag_k | csgn |
abs | norm | abs_imag | norm_imag | arg |
Descriptions of each of the functions follow:
The function T operator [](int n) const returns the coefficient of the unit UNITS[n] for n = 0, 1, 2, and 3.
Each of these quaternion-valued member functions has the prototype Quaternion<T> f() const; and has a corresponding procedural function Quaternion<T> f( const Quaternion<T> );.
imag | conj | signum |
Descriptions of each of the functions follow:
Each of the square, square root, and inverse member functions has the prototype Quaternion<T> f() const; and has a corresponding procedural function Quaternion<T> f( const Quaternion<T> );.
sqr | sqrt | inverse |
Descriptions of each of the functions follow:
The member function Quaternion<T> rotate( const Quaternion<T> w ) const; and its associated procedural function Quaternion<T> rotate( const Quaternion<T> z, const Quaternion<T> w ) calculates wzw*. If w has unit length and z is an imaginary quaternion, then this member function returns vector z rotated 2 arg(w) radians around the line defined by ℑ(w).
The power function is overloaded with two prototypes:
Quaternion<T> pow( T ) | Quaternion<T> pow( Quaternion<T> ) |
Each of the exponential and logarithmic member functions has the prototype Quaternion<T> f() const; and has a corresponding procedural function Quaternion<T> f( const Quaternion<T> );.
exp | log | log10 |
Descriptions of each of the functions follow:
Each of the trigonometric, hyperbolic, inverse trigonometric, and inverse hyperbolic member functions has the prototype Quaternion<T> f() const; and has a corresponding procedural function Quaternion<T> f( const Quaternion<T> );.
sin | cos | tan | sec | csc | cot |
sinh | cosh | tanh | sech | csch | coth |
asin | acos | atan | asec | acsc | acot |
asinh | acosh | atanh | asech | acsch | acoth |
For example, the sin function calculates the result of z − z3/3! + z5/5! − z7/7! + z9/9! − z11/11! + ⋅⋅⋅ by using the formula
Bessel functions of the first kind, Jn(z) are implemented for integer values of n. The prototype of the member function is Quaternion<T> bessel_J( int ) const; and there is the corresponding procedural function Quaternion<T> bessel_J( int, const Quaternion<T>) const;.
Because the coefficients of the Taylor series for Bessel functions of the first kind are real, this function is well defined even for the non-commutative quaternions.
Each of the integer-valued member functions has the prototype Quaternion<T> f() const; and has a corresponding procedural function Quaternion<T> f( const Quaternion<T> );.
floor | ceil |
In both cases, the floor and ceiling, respectively, are calculated for each component.
The polynomial v0zn − 1 + v1zn − 2 + v2zn − 3 + ⋅⋅⋅ vn − 3z2 + vn − 2z + vn − 1 may be calculated efficiently using Horner's rule. The array v of n entries may be of type T *. The lack of commutativity dictates that the polynomial is not well defined from quaternionic coefficients, hence the coefficients are restricted to real values.
Quaternion<T> horner( T * v, unsigned int n );
The Newton polynomial with offsets:
v0(z − cn − 1)(z − cn − 2)⋅⋅⋅(z − c3)(z − c2)(z − c1) +
v1(z − cn − 1)(z − cn − 2)⋅⋅⋅(z − c3)(z − c2) +
v2(z − cn − 1)(z − cn − 2)⋅⋅⋅(z − c3) + ⋅⋅⋅ +
vn − 3(z − cn − 1)(z − cn − 2) +
vn − 2(z − cn − 1) +
vn − 1 may also be
calculated efficiently using Horner's rule. The arrays v and c of n entries
must be of type T *.
Quaternion<T> horner( T * v, T * c, unsigned int n );
Similarly, due to commutativity, the coefficients and the offsets must be restricted to real values.
Corresponding to each of this functions is a procedural function which takes the variable z as a first argument.
All binary arithmetic operators operator ⋅ have the following prototypes:
operator ⋅ ( const Quaternion<T> &, const Quaternion<T> & ), operator ⋅ ( T, const Quaternion<T> & ), and operator ⋅ ( const Quaternion<T> &, T ). The standard operations are:+ | - | * | / |
Note that z/w is defined as zw-1.
The unary arithmetic operator operator - has the prototype operator - ( const Quaternion<T> & ) and returns the negative of the quaternion.
The assignment operators operator ⋅ have the prototypes operator ⋅ ( const Quaternion<T> & ) and operator ⋅ ( T ) and appropriately modifies and returns this quaternion. The operations are:
= | += | -= | *= | /= |
The auto increment and auto decrement operators work on the real part of the quaternion.
All binary Boolean operators have the following prototypes:
operator ⋅ ( const Quaternion<T> &, const Quaternion<T> & ), operator ⋅ ( T, const Quaternion<T> & ), and operator ⋅ ( const Quaternion<T> &, T ). The standard operations are:== | != |
Descriptions of each of the functions follow:
Each of the following member functions has the prototype bool f() const; and returns a value based on the components of this quaternion.
is_imaginary | is_inf | is_nan | is_neg_inf |
is_pos_inf | is_real | is_real_inf | is_zero |
Descriptions of each of the functions follow:
Each of the following static factory functions has the prototype static Quaternion<T> f() const; and returns a random quaternion according to the following definitions:
where rk is a random real value.
The stream operators have been overloaded to print and read quaternions.