Associated Topics || Dr. Math Home || Search Dr. Math

### Quarternions

```
Date: 2/17/96 at 8:10:14
From: Anonymous
Subject: Quarternions

Hi,

Can someone tell me what quarternions are?

What are all the various ways of doing 3D transformations?

Thanks.

```

```
Date: 2/20/96 at 18:30:22
From: Doctor Byron
Subject: Re: Quarternions

A Quaternion is something like a complex number except that it
has four components instead of two and looks like:

(a+ib+jc+kd)

Quaternions further satisfy the rules i^2=j^2=k^2=-1, ij=-ji=k,
jk=-kj=i, ki=-ik=j.

These quaternions are often used in the generation of four-
dimensional fractals.  There is an good introduction to these kinds
of graphics applications at:

http://www.krs.hia.no/~fgill/quatern.html

The site even has some sample C programs for generating very
impressive fractal graphics.

Here is some additional information about quaternion
computations.  I found it at

http://www.dtek.chalmers.se/Datorsys/Project/qjulia/theory/quaternion.html

Definition

A Quaternion number is an extension to complex numbers invented
by Lord William Hamilton.  A Quaternion number has two extra
imaginary units which are called j and k. We write such a number as
q = a + b*i + c*j + d*k, or for short: (a, b, c, d). As long as c and d
are equal to zero, q is nothing other then a complex number. These are
the multiplication rules for i, j, k:

i*i = j*j = k*k = -1
i*j = k,    j*i = -k
j*k = i,    k*j = -i
k*i = j,    i*k = -j

One can see these rules as if i, j, k are three orthogonal unit vectors;
the multiplication acts like a right-handed cross product of them.
These rules do not cause any real difficulty until we look at
multiplication of quaternions. Later on this page we see a very
important fact: multiplication/division of quaternions is not
commutative.

Conjugate, Norm and Absolute value

q = (a, b, c, d)

conj(q) = (a, -b, -c, -d)
norm(q) = a*a + b*b + c*c + d*d
abs(q)  = sqrt(norm(q))

q = (a, b, c, d), p = (x, y, z, w)

q + p = (a+x, b+y, c+z, d+w)
q - p = (a-x, b-y, c-z, d-w)

Scaling

q = (a, b, c, d)
t = Real value

t*q = q*t = (t*a, t*b, t*c, t*d)

Multiplication

q = (a, b, c, d), p = (x, y, z, w)

q * p = (a + b*i + c*j + d*k) * (x + y*i + z*j + w*k)

=   a   * (x + y*i + z*j + w*k)
+ b*i * (x + y*i + z*j + w*k)
+ c*j * (x + y*i + z*j + w*k)
+ d*k * (x + y*i + z*j + w*k)

=   a*x   + a*y*i + a*z*j + a*w*k
+ b*x*i - b*y   + b*z*k - b*w*j
+ c*x*j - c*y*k - c*z   + c*w*i
+ d*x*k + d*y*j - d*z*i - d*w

= (a*x - b*y - c*z - d*w,
a*y + b*x + c*w - d*z,
a*z - b*w + c*x + d*y,
a*w + b*z - c*y + d*x)

We can rewrite this if we define two 3-dimensional vectors:

qV = (b, c, d)      q = (a, qV)
pV = (y, z, w)      p = (x, pV)

q * p = (a*x - dotprod(qV, pV),
a*pV + x*qV + crossprod(qV, pV))

Now it is easy to see that multiplication of quaternion is not
commutative, since the cross product of the vectors is not
commutative. One must take this in consideration while working
with quaternion algebra.

If we square a quaternion, the cross product is zero:

q * q = (a*a - dotprod(qV, qV), 2*a*qV)

In fact, one does not have to consider the multiplication order at all
when raising a quaternion to any positive integer power.

Fast multiplication

There are some schemes available that reduce the number of
internal multiplications when doing quaternion multiplication.
Here is one:

q = (a, b, c, d), p = (x, y, z, w)

tmp_00 = (d - c) * (z - w)
tmp_01 = (a + b) * (x + y)
tmp_02 = (a - b) * (z + w)
tmp_03 = (c + d) * (x - y)
tmp_04 = (d - b) * (y - z)
tmp_05 = (d + b) * (y + z)
tmp_06 = (a + c) * (x - w)
tmp_07 = (a - c) * (x + w)
tmp_08 = tmp_05 + tmp_06 + tmp_07
tmp_09 = 0.5 * (tmp_04 + tmp_08)

q * p = (tmp_00 + tmp_09 - tmp_05,
tmp_01 + tmp_09 - tmp_08,
tmp_02 + tmp_09 - tmp_07,
tmp_03 + tmp_09 - tmp_06)

With this method you get 7 less multiplications, but 15 more
additions/subtractions.  Generally, this is still an improvement.

Inverse and division

inv(q) = conj(q)/norm(q)

q / p = inv(p)*q  or  q*inv(p)

Here it can be difficult to know which one to choose. I do not use
division very often, but when I have to I always use q/p = +inv(p)*q.
If I use it all the time, there seems to be no problem. I am not that
good at explaining this, if someone knows better please send me an
e-mail.

As far as your second question about 3D transformations, I hardly
know where to begin because there are so many possible ideas in
this area. Perhaps you could narrow down your question?  For
example, if you were interested in learning more about how to use
matrices to represent linear transformations in three dimensions,
I would be able to send you some much more useful information.
Otherwise, my answers will probably end up being too vague.

I hope this has been helpful.  Good luck with the quaternion
material!

-Doctor Byron,  The Math Forum

```
Associated Topics:
College Definitions
College Imaginary/Complex Numbers

Search the Dr. Math Library:

 Find items containing (put spaces between keywords):   Click only once for faster results: [ Choose "whole words" when searching for a word like age.] all keywords, in any order at least one, that exact phrase parts of words whole words

Submit your own question to Dr. Math
Math Forum Home || Math Library || Quick Reference || Math Forum Search