

 
Manual Reference Pages  QUATERNION (3)
NAME
qtom, mtoq, qadd, qsub, qneg, qmul, qdiv, qunit, qinv, qlen, slerp, qmid, qsqrt  Quaternion arithmetic
CONTENTS
Synopsis
Description
Source
See Also
Bugs
SYNOPSIS
#include <draw.h>
#include <geometry.h>
Quaternion qadd(Quaternion q, Quaternion r)
Quaternion qsub(Quaternion q, Quaternion r)
Quaternion qneg(Quaternion q)
Quaternion qmul(Quaternion q, Quaternion r)
Quaternion qdiv(Quaternion q, Quaternion r)
Quaternion qinv(Quaternion q)
double qlen(Quaternion p)
Quaternion qunit(Quaternion q)
void qtom(Matrix m, Quaternion q)
Quaternion mtoq(Matrix mat)
Quaternion slerp(Quaternion q, Quaternion r, double a)
Quaternion qmid(Quaternion q, Quaternion r)
Quaternion qsqrt(Quaternion q)
DESCRIPTION
The Quaternions are a noncommutative extension field of the Real numbers, designed
to do for rotations in 3space what the complex numbers do for rotations in 2space.
Quaternions have a real component
r and an imaginary vector component v=(i,j,k).
Quaternions add componentwise and multiply according to the rule
(r,v)(s,w)=(rsv.w, rw+vs+v×w),
where . and × are the ordinary vector dot and cross products.
The multiplicative inverse of a nonzero quaternion (r,v)
is (r,v)/(r^{2}v.v).
The following routines do arithmetic on quaternions, represented as


typedef struct Quaternion Quaternion;
struct Quaternion{
double r, i, j, k;
};

Name

Description

qadd 
Add two quaternions.

qsub 
Subtract two quaternions.

qneg 
Negate a quaternion.

qmul 
Multiply two quaternions.

qdiv 
Divide two quaternions.

qinv 
Return the multiplicative inverse of a quaternion.

qlen 
Return
sqrt(q.r*q.r+q.i*q.i+q.j*q.j+q.k*q.k), the length of a quaternion.

qunit 
Return a unit quaternion
(length=1) with components proportional to
q’s.

A rotation by angle θ about axis
A (where
A is a unit vector) can be represented by
the unit quaternion q=(cos θ/2, Asin θ/2).
The same rotation is represented by q; a rotation by θ about A is the same as a rotation by θ about A.
The quaternion q transforms points by
(0,x’,y’,z’) = q^{1}(0,x,y,z)q.
Quaternion multiplication composes rotations.
The orientation of an object in 3space can be represented by a quaternion
giving its rotation relative to some ‘standard’ orientation.

The following routines operate on rotations or orientations represented as unit quaternions:

mtoq 
Convert a rotation matrix (see
matrix(3))
to a unit quaternion.

qtom 
Convert a unit quaternion to a rotation matrix.

slerp 
Spherical lerp. Interpolate between two orientations.
The rotation that carries
q to
r is q^{1}r, so
slerp(q, r, t) is q(q^{1}r)^{t}.

qmid 
slerp(q, r, .5)

qsqrt 
The square root of
q. This is just a rotation about the same axis by half the angle.


SOURCE
/usr/local/plan9/src/libgeometry/quaternion.c
SEE ALSO
matrix(3),
qball(3)
BUGS
To avoid name conflicts with NetBSD,
qdiv is a preprocessor macro defined as
p9qdiv; see
intro(3).
Visit the GSP FreeBSD Man Page Interface. Output converted with manServer 1.07. 