QTPOW Name
QTPOW
Author
Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770
craigm@lheamail.gsfc.nasa.gov
UPDATED VERSIONs can be found on my WEB PAGE:
http://cow.physics.wisc.edu/~craigm/idl/idl.html
Purpose
Raise quaternion Q to the "power" POW
Major Topics
Geometry
Calling Sequence
QNEW = QTPOW(Q, POW)
Description
The function QTPOW raises a quaterion Q to the power P. The
operation
QNEW = QTPOW(Q, POW)
is equivalent to
QNEW = QTEXP( POW * QTLOG(Q))
which is the same as the definition of raising a real number to
any power (however, QTPOW is faster than using QTLOG and QTEXP).
For integer values of POW, this form of exponentiation is also
directly equivalent to the multiplication of that many Q's
together.
Geometrically, raising Q to any power between 0 and 1 realizes a
rotation that smoothly interpolates between the identity
quaternion and Q. Thus, QTPOW is useful for interpolation of
quaternions or SLERPing (spherical linear interpolation).
When raising more than one quaternion to a power at a time, the
number of quaternions and powers must be equal.
Conventions for storing quaternions vary in the literature and from
library to library. This library uses the convention that the
first three components of each quaternion are the 3-vector axis of
rotation, and the 4th component is the rotation angle. Expressed
in formulae, a single quaternion is given by:
Q(0:2) = [VX, VY, VZ]*SIN(PHI/2)
Q(3) = COS(PHI/2)
where PHI is the rotation angle, and VAXIS = [VX, VY, VZ] is the
rotation eigen axis expressed as a unit vector. This library
accepts quaternions of both signs, but by preference returns
quaternions with a positive 4th component.
Inputs
Q - array of one or more unit quaternions. For a single
quaternion, Q should be a 4-vector. For N quaternions, Q
should be a 4xN array.
POW - array of N powers, where N is the number of quaternions.
Returns
The resulting exponentiated unit quaternions. For a single
inputs, returns a 4-vector. For N input quaternions, returns N
quaternions as a 4xN array. Keyword Parameters
NONE Example
;; Form a rotation quaternion of 45 degrees about the X axis
Q = qtcompose([1,0,0], !dpi/4)
;; Make an array of 1001 values smoothly varying from 0 to 1
P = dindgen(1001)/1000d
;; Perform spherical linear interpolation
QNEW = QTERP(Q, P)
See Also
QTANG, QTAXIS, QTCOMPOSE, QTERP, QTEXP, QTFIND, QTINV, QTLOG,
QTMAT, QTMULT, QTPOW, QTVROT
Modification History
Written, July 2001, CM
Documented, Dec 2001, CM
Usage message, error checking, 15 Mar 2002, CM