Quaternions are hypercomplex numbers used to represent spatial rotations in three dimensions. This set of routines provides a useful basis for working with quaternions in Octave. A tutorial is in the Octave source scripts/quaternion/quaternion.ps.
These functions were written by A. S. Hodel Associate Professor, Auburn University.
| [a b, c, d] = quaternion (w) | Function File |
| [vv theta] = quaternion (w) | Function File |
| w = quaternion (a b, c, d) | Function File |
| w = quaternion (vv theta) | Function File |
Construct or extract a quaternion
w = a*i + b*j + c*k + d
from given data. |
| qconj (q) | Function File |
Conjugate of a quaternion.
q = [w x, y, z] = w*i + x*j + y*k + z
qconj (q) = -w*i -x*j -y*k + z
|
| qderiv (omega) | Function File |
|
Derivative of a quaternion.
Let Q be a quaternion to transform a vector from a fixed frame to a rotating frame. If the rotating frame is rotating about the [x y, z] axes at angular rates [wx, wy, wz], then the derivative of Q is given by Q' = qderivmat (omega) * Q
If the passive convention is used (rotate the frame not the vector), then Q' = -qderivmat (omega) * Q
|
| qderivmat (omega) | Function File |
|
Derivative of a quaternion.
Let Q be a quaternion to transform a vector from a fixed frame to a rotating frame. If the rotating frame is rotating about the [x y, z] axes at angular rates [wx, wy, wz], then the derivative of Q is given by Q' = qderivmat (omega) * Q
If the passive convention is used (rotate the frame not the vector), then Q' = -qderivmat (omega) * Q.
|
| qinv (q) | Function File |
Return the inverse of a quaternion.
q = [w x, y, z] = w*i + x*j + y*k + z
qmult (q qinv (q)) = 1 = [0 0 0 1]
|
| qmult (a b) | Function File |
Multiply two quaternions.
[w x, y, z] = w*i + x*j + y*k + z
identities: i^2 = j^2 = k^2 = -1
ij = k jk = i
ki = j kj = -i
ji = -k ik = -j
|
| qtrans (v q) | Function File |
Transform the unit quaternion v by the unit quaternion q.
Returns v = q*v/q.
|
| qtransv (v q) | Function File |
Transform the 3-D vector v by the unit quaternion q.
Return a column vector.
vi = (2*real(q)^2 - 1)*vb + 2*imag(q)*(imag(q)'*vb)
+ 2*real(q)*cross(imag(q)vb)
Where imag(q) is a column vector of length 3. |
| qtransvmat (qib) | Function File |
Construct a 3x3 transformation matrix from quaternion qib that
is equivalent to rotation of th radians about axis vv where
[vv th] = quaternion (qib).
|
| qcoordinate_plot (qf qb, qv) | Function File |
Plot in the current figure a set of coordinate axes as viewed from
the orientation specified by quaternion qv. Inertial axes are
also plotted:
|