.TH QUATERNION 3
.SH NAME
qtom, mtoq, qadd, qsub, qneg, qmul, qdiv, qunit, qinv, qlen, slerp, qmid, qsqrt \- Quaternion arithmetic
.SH SYNOPSIS
.PP
.B
#include <draw.h>
.PP
.B
#include <geometry.h>
.PP
.B
Quaternion qadd(Quaternion q, Quaternion r)
.PP
.B
Quaternion qsub(Quaternion q, Quaternion r)
.PP
.B
Quaternion qneg(Quaternion q)
.PP
.B
Quaternion qmul(Quaternion q, Quaternion r)
.PP
.B
Quaternion qdiv(Quaternion q, Quaternion r)
.PP
.B
Quaternion qinv(Quaternion q)
.PP
.B
double qlen(Quaternion p)
.PP
.B
Quaternion qunit(Quaternion q)
.PP
.B
void qtom(Matrix m, Quaternion q)
.PP
.B
Quaternion mtoq(Matrix mat)
.PP
.B
Quaternion slerp(Quaternion q, Quaternion r, double a)
.PP
.B
Quaternion qmid(Quaternion q, Quaternion r)
.PP
.B
Quaternion qsqrt(Quaternion q)
.SH DESCRIPTION
The Quaternions are a non-commutative extension field of the Real numbers, designed
to do for rotations in 3-space what the complex numbers do for rotations in 2-space.
Quaternions have a real component
.I r
and an imaginary vector component \fIv\fP=(\fIi\fP,\fIj\fP,\fIk\fP).
Quaternions add componentwise and multiply according to the rule
(\fIr\fP,\fIv\fP)(\fIs\fP,\fIw\fP)=(\fIrs\fP-\fIv\fP\v'-.3m'.\v'.3m'\fIw\fP, \fIrw\fP+\fIvs\fP+\fIv\fP×\fIw\fP),
where \v'-.3m'.\v'.3m' and × are the ordinary vector dot and cross products.
The multiplicative inverse of a non-zero quaternion (\fIr\fP,\fIv\fP)
is (\fIr\fP,\fI-v\fP)/(\fIr\^\fP\u\s-22\s+2\d-\fIv\fP\v'-.3m'.\v'.3m'\fIv\fP).
.PP
The following routines do arithmetic on quaternions, represented as
.IP
.EX
.ta 6n
typedef struct Quaternion Quaternion;
struct Quaternion{
	double r, i, j, k;
};
.EE
.TF qunit
.TP
Name
Description
.TP
.B qadd
Add two quaternions.
.TP
.B qsub
Subtract two quaternions.
.TP
.B qneg
Negate a quaternion.
.TP
.B qmul
Multiply two quaternions.
.TP
.B qdiv
Divide two quaternions.
.TP
.B qinv
Return the multiplicative inverse of a quaternion.
.TP
.B qlen
Return
.BR sqrt(q.r*q.r+q.i*q.i+q.j*q.j+q.k*q.k) ,
the length of a quaternion.
.TP
.B qunit
Return a unit quaternion 
.RI ( length=1 )
with components proportional to
.IR q 's.
.PD
.PP
A rotation by angle \fIθ\fP about axis
.I A
(where
.I A
is a unit vector) can be represented by
the unit quaternion \fIq\fP=(cos \fIθ\fP/2, \fIA\fPsin \fIθ\fP/2).
The same rotation is represented by \(mi\fIq\fP; a rotation by \(mi\fIθ\fP about \(mi\fIA\fP is the same as a rotation by \fIθ\fP about \fIA\fP.
The quaternion \fIq\fP transforms points by
(0,\fIx',y',z'\fP) = \%\fIq\fP\u\s-2-1\s+2\d(0,\fIx,y,z\fP)\fIq\fP.
Quaternion multiplication composes rotations.
The orientation of an object in 3-space can be represented by a quaternion
giving its rotation relative to some `standard' orientation.
.PP
The following routines operate on rotations or orientations represented as unit quaternions:
.TF slerp
.TP
.B mtoq
Convert a rotation matrix (see
.IR matrix (3))
to a unit quaternion.
.TP
.B qtom
Convert a unit quaternion to a rotation matrix.
.TP
.B slerp
Spherical lerp.  Interpolate between two orientations.
The rotation that carries
.I q
to
.I r
is \%\fIq\fP\u\s-2-1\s+2\d\fIr\fP, so
.B slerp(q, r, t)
is \fIq\fP(\fIq\fP\u\s-2-1\s+2\d\fIr\fP)\u\s-2\fIt\fP\s+2\d.
.TP
.B qmid
.B slerp(q, r, .5)
.TP
.B qsqrt
The square root of
.IR q .
This is just a rotation about the same axis by half the angle.
.PD
.SH SOURCE
.B \*9/src/libgeometry/quaternion.c
.SH SEE ALSO
.IR matrix (3),
.IR qball (3)
.SH BUGS
To avoid name conflicts with NetBSD,
.I qdiv
is a preprocessor macro defined as 
.IR p9qdiv ;
see
.IR intro (3).
