Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
QUATERNION(3)		   Library Functions Manual		 QUATERNION(3)

       qtom,  mtoq,  qadd,  qsub,  qneg, qmul, qdiv, qunit, qinv, qlen,	slerp,
       qmid, qsqrt - Quaternion	arithmetic

       #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)

       The Quaternions are a non-commutative extension field of	the Real  num-
       bers,  designed to do for rotations in 3-space what the complex numbers
       do for rotations	in 2-space.  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)=(rs-v.w,  rw+vs+vAw),
       where . and A are the ordinary vector dot and cross products.  The mul-
       tiplicative inverse of a	non-zero quaternion (r,v) is (r,-v)/(r2-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

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

       A rotation by angle _I, about axis A (where A is a unit vector)  can  be
       represented  by	the unit quaternion q=(cos _I,/2, Asin _I,/2).  The same
       rotation	is represented by -q; a	rotation by -_I,	about -A is  the  same
       as  a  rotation	by  _I, about A.	 The quaternion	q transforms points by
       (0,x',y',z') = q-1(0,x,y,z)q.  Quaternion multiplication	composes rota-
       tions.  The orientation of an object in 3-space 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 to	a unit quaternion.

       qtom   Convert a	unit quaternion	to a rotation matrix.

       slerp  Spherical	 lerp.	Interpolate between two	orientations.  The ro-
	      tation that carries q to	r  is  q-1r,  so  slerp(q,  r,	t)  is

       qmid   slerp(q, r, .5)

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


       To avoid	name conflicts with NetBSD, qdiv is a preprocessor  macro  de-
       fined as	p9qdiv;	see



Want to link to this manual page? Use this URL:

home | help