GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
QUATERNION(3) FreeBSD 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 numbers, 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+v×w), where . and × are the ordinary vector dot and cross products. The multiplicative 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 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 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 rotation that carries q to r is q-1r, so slerp(q, r, t) is q(q-1r)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.

/src/libgeometry/quaternion.c

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

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.