# Newsgroups: comp.graphics.algorithms quaternion puzzle

From: Dave Eberly (eberly@magic-software.com)
Subject: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-15 13:58:18 PST

Given a unit-length quaternion function q(t), you will find in
various references the equation for the derivative
(1) dq/dt = 0.5*w(t)*q(t)
where w(t) is a quaternion representing angular velocity.
However, if you write q(t) = cos(a(t)/2)+u(t)*sin(a(t)/2)
and differentiate directly, you get
(2) dq/dt = 0.5*(da/dt)*u(t)*q(t) + (du/dt)*sin(a/2)

Since ASCII math is hard to do, I uploaded
http://www.magic-software.com/Temp/QuaternionPuzzle.pdf
that shows a derivation of (1) similar to one in document of
David Baraff and to the one in Jack Kuiper's book on
quaternions. I also show the derivation of (2) and mention
a couple of online papers that agree with this version.

Anyone know how to resolve the differences here. In particular
how does w(t) in equation (1) compare to (da/dt)*u(t) in equation
(2), and what to do about that extra term in equation (2)?

--
Dave Eberly
eberly@magic-software.com
http://www.magic-software.com
http://www.wild-magic.com
Post a follow-up to this message

From: Pete (Pete@removebtclick.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-15 15:02:10 PST

"Dave Eberly" <eberly@magic-software.com> wrote in message
news:JOkV9.12105$Qr4.1198772@newsread1.prod.itd.earthlink.net... > Given a unit-length quaternion function q(t), you will find in > various references the equation for the derivative > (1) dq/dt = 0.5*w(t)*q(t) > where w(t) is a quaternion representing angular velocity. > However, if you write q(t) = cos(a(t)/2)+u(t)*sin(a(t)/2) > and differentiate directly, you get > (2) dq/dt = 0.5*(da/dt)*u(t)*q(t) + (du/dt)*sin(a/2) Isn't (1) only true for rotation about a fixed axis? With w(t) = u * da/dt. Otherwise I don't see how you avoid the extra term. Pete Post a follow-up to this message Message 3 in thread From: Dave Eberly (eberly@magic-software.com) Subject: Re: quaternion puzzle Newsgroups: comp.graphics.algorithms Date: 2003-01-15 19:30:26 PST "Pete" <Pete@removebtclick.com> wrote in message news:b04p8n$7r$1@venus.btinternet.com... > > "Dave Eberly" <eberly@magic-software.com> wrote in message > news:JOkV9.12105$Qr4.1198772@newsread1.prod.itd.earthlink.net...
> > Given a unit-length quaternion function q(t), you will find in
> > various references the equation for the derivative
> > (1) dq/dt = 0.5*w(t)*q(t)
> > where w(t) is a quaternion representing angular velocity.
> > However, if you write q(t) = cos(a(t)/2)+u(t)*sin(a(t)/2)
> > and differentiate directly, you get
> > (2) dq/dt = 0.5*(da/dt)*u(t)*q(t) + (du/dt)*sin(a/2)
>
> Isn't (1) only true for rotation about a fixed axis?

I believe it is true for a variable axis (numerical experiments
also support this). But if you believe it is not true, then the
construction I provided in the uploaded PDF file is wrong--I
would appreciate any corrections to that construction.

> With w(t) = u * da/dt.
>
> Otherwise I don't see how you avoid the extra term.

If w(t) = u * da/dt, then the only way (1) and (2) can
agree is if du/dt = 0, which it is not since the rotation axis
direction can change over time.

--
Dave Eberly
eberly@magic-software.com
http://www.magic-software.com
http://www.wild-magic.com

From: Pete (Pete@removebtclick.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-15 23:49:02 PST

----- Original Message -----
From: "Dave Eberly" <eberly@magic-software.com>
Newsgroups: comp.graphics.algorithms
Sent: Thursday, January 16, 2003 3:29 AM
Subject: Re: quaternion puzzle

> "Pete" <Pete@removebtclick.com> wrote in message
> news:b04p8n$7r$1@venus.btinternet.com...
> >
> > "Dave Eberly" <eberly@magic-software.com> wrote in message
> > news:JOkV9.12105$Qr4.1198772@newsread1.prod.itd.earthlink.net... > > > Given a unit-length quaternion function q(t), you will find in > > > various references the equation for the derivative > > > (1) dq/dt = 0.5*w(t)*q(t) > > > where w(t) is a quaternion representing angular velocity. > > > However, if you write q(t) = cos(a(t)/2)+u(t)*sin(a(t)/2) > > > and differentiate directly, you get > > > (2) dq/dt = 0.5*(da/dt)*u(t)*q(t) + (du/dt)*sin(a/2) > > > > Isn't (1) only true for rotation about a fixed axis? > > I believe it is true for a variable axis (numerical experiments > also support this). But if you believe it is not true, then the > construction I provided in the uploaded PDF file is wrong--I > would appreciate any corrections to that construction. > I'm a bit new to this so apologies in advance for any errors but..... This can be handled much more cleanly in geometric algebra where a quaternion represents an even subalgebra of the full GA :- q = a + c where a = scalar and c = arbitrary bivector we can write c = Ib where b is an arbitrary vector and I = the pseudoscalar formed by the triple product of the basis vectors I=e1*e2*e3. Now note that Ib*Ib = -1 This allows us to write a unit quaternion in the form q = exp+/-(Ib * A/2) where A is the rotation angle and b is the rotation axis. Since GA is a linear algebra we can apply differentiation in the normal way to get :- q' = 0.5*I*(b'A + bA')q [' denotes d/dt] And writing IbA' = w gives q' = 0.5*I*(b'A + w)q The first term will only disappear if b' = 0 to give q' = 0.5*w*q where w is clearly a bivector which in 3d can be mapped to a vector ala the cross product. Note though that in GA the analysis works in any dimension Hth Pete Message 5 in thread From: Dave Eberly (eberly@magic-software.com) Subject: Re: quaternion puzzle Newsgroups: comp.graphics.algorithms Date: 2003-01-16 06:06:02 PST "Pete" <Pete@removebtclick.com> wrote in message news:b05o4e$3qt$1@sparta.btinternet.com... <snip of GA construction> > Since GA is a linear algebra we can apply differentiation in > the normal way to get :- > q' = 0.5*I*(b'A + bA')q [' denotes d/dt] > > And writing IbA' = w gives > q' = 0.5*I*(b'A + w)q > > The first term will only disappear if b' = 0 to give > q' = 0.5*w*q > > where w is clearly a bivector which in 3d can be mapped to > a vector ala the cross product. Using GA methods produces the same result as using calculus directly on my definition of q(t). Sorry, the GA construction does not provide any new insight for me. My equation (1) was dq/dt = 0.5*w(t)*q(t) where w(t) = w0*i+w1*j+w2*k and W(t) = (w0,w1,w2) is the angular velocity vector. Equation (1) is used in dynamics as an alternative to the matrix differential equation (3) dR/dt = S R where S = [sij] is skew-symmetric with s11 = s22 = s33 = 0, s21 = -s12 = w2, s13 = -s31 = w1, s32 = -s23 = w0. The matrix R(t) is used to orient a rigid body in the world by r = R*b where b is in body coordinates and r is in world coordinates. The quaternion q(t) represents R(t). I understand the mathematical models about rigid body motion and all the various parameters, including angular velocity. In order to verify that (1) and (3) are interchangeable, I attempted to construct dq/dt from q(t) = cos(a/2)+u*sin(a/2) as shown in equation (2) of a previous post (2) dq/dt = 0.5*(da/dt)*u(t)*q(t) + (du/dt)*sin(a/2) Clearly a different form than (1). If you set w(t) = (da/dt)*u(t), then as you claim I would need du/dt = 0. But the rotation axis direction can vary with time, so we have a problem. If you were to construct a and u from a constant angular velocity vector W, you would choose a = Length(W), U = (u0,u1,u2) = W/a, and u = u0*i+u1*j+u2*k. This is what a GA approach would do, exp(W/2) = cos(a/2)+(W/a)*sin(a/2) [for example, page 71 of Lounesto's "Clifford Algebras and Spinors"]. In this context it appears w(t) = a(t)*u(t) is the correct choice. This is probably the source of my confusion because I initially thought that w(t) = (da/dt)*u(t) looked like the natural choice. At any rate, I am quite content with equation (1) in a physics simulator. Just my mathematical inquisitiveness coming into play about equation (2). Certainly (2) is not a convenient form for a numerical implementation. -- Dave Eberly eberly@magic-software.com http://www.magic-software.com http://www.wild-magic.com Message 6 in thread From: Pete (Pete@removebtclick.com) Subject: Re: quaternion puzzle View this article only Newsgroups: comp.graphics.algorithms Date: 2003-01-16 07:45:01 PST "Dave Eberly" <eberly@magic-software.com> wrote in message news:c%yV9.12980$Dq.1294817@newsread2.prod.itd.earthlink.net...

>
> Clearly a different form than (1). If you set w(t) = (da/dt)*u(t),
> then as you claim I would need du/dt = 0. But the rotation axis
> direction can vary with time, so we have a problem.

Actually I made the elementary mistake earlier of assuming that

Ib'Aq = 0 ==> b'=0

whereas in general we just require that Ib' and q are orthogonal for Ib'q =0
I think this arises from the requirement that qq* = 1 using a similar
contruction to u (dot) u = 1 in your earlier post.

I clearly need more practise with these things.

Pete

From: Dom (domibel@cs.tu-berlin.de)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-15 15:25:28 PST

Can you explain why the quaternion u(t) depends on time?
I think this is only a constant value. And then the extra-term-derivation is
zero.

From: Dave Eberly (eberly@magic-software.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-15 19:31:50 PST

"Dom" <domibel@cs.tu-berlin.de> wrote in message
news:3e25eddc_2@news.arcor-ip.de...
> Can you explain why the quaternion u(t) depends on time?
> I think this is only a constant value. And then the extra-term-derivation is
> zero.

The components of u are the components of the direction
vector for the rotation axis. The quaternion varies with time,
so either the angle changes in time or the axis changes in time
(or both). If the axis changes, then u depends on t.

--
Dave Eberly
eberly@magic-software.com
http://www.magic-software.com
http://www.wild-magic.com

From: John Blackburne (johnb@hk.super.net)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-15 15:30:37 PST

In article <JOkV9.12105$Qr4.1198772@newsread1.prod.itd.earthlink.net>, "Dave Eberly" <eberly@magic-software.com> wrote: > Given a unit-length quaternion function q(t), you will find in > various references the equation for the derivative > (1) dq/dt = 0.5*w(t)*q(t) > where w(t) is a quaternion representing angular velocity. > However, if you write q(t) = cos(a(t)/2)+u(t)*sin(a(t)/2) > and differentiate directly, you get > (2) dq/dt = 0.5*(da/dt)*u(t)*q(t) + (du/dt)*sin(a/2) > > Since ASCII math is hard to do, I uploaded > http://www.magic-software.com/Temp/QuaternionPuzzle.pdf > that shows a derivation of (1) similar to one in document of > David Baraff and to the one in Jack Kuiper's book on > quaternions. I also show the derivation of (2) and mention > a couple of online papers that agree with this version. > > Anyone know how to resolve the differences here. In particular > how does w(t) in equation (1) compare to (da/dt)*u(t) in equation > (2), and what to do about that extra term in equation (2)? I think you've just shown they are the same. Certainly (1) is correct (I've seen a far simpler derivation not involving trig, but don't have it to hand) and I can't see anything wrong with (2). They are obviously the same when w and u are parallel, i.e. when it's spinning about the same axis it's initial rotation axis. Then w = u * da/dt and du/dt is zero. It's less obvious more generally, but you could take your algebra as proof of it. There may be a more direct way of relating them, especially as u is a unit vector so du/dt is normal to it and measures the rate of shift of axis: intuitively the more w and u point in different directions the greater the magnitude of du/dt. John -- John Blackburne; programmer, The Pitbull Syndicate <http://www.hk.super.net/~johnb> Message 10 in thread From: Dave Eberly (eberly@magic-software.com) Subject: Re: quaternion puzzle Newsgroups: comp.graphics.algorithms Date: 2003-01-15 19:36:24 PST "John Blackburne" <johnb@hk.super.net> wrote in message news:johnb-1501032330570001@ppp-225-80-59.friaco.access.uk.tiscali.com... > I think you've just shown they are the same. Certainly (1) is correct > (I've seen a far simpler derivation not involving trig, but don't have it > to hand) and I can't see anything wrong with (2). Perhaps I have shown they are the same, but then I should be able to apply some algebra/calculus/trigonometry to manipulate the right-hand side of (2) to obtain the right-hand side of (1). My original post is evidence I have been unable to do so :) > They are obviously the same when w and u are parallel, i.e. when it's > spinning about the same axis it's initial rotation axis. Then w = u * > da/dt and du/dt is zero. It's less obvious more generally, but you could > take your algebra as proof of it. There may be a more direct way of > relating them, especially as u is a unit vector so du/dt is normal to it > and measures the rate of shift of axis: intuitively the more w and u point > in different directions the greater the magnitude of du/dt. I suppose I just need to think a bit harder about the mathematical steps to equate the right-hand side of (2) to the right-hand side of (1). Thanks for the feedback. -- Dave Eberly eberly@magic-software.com http://www.magic-software.com http://www.wild-magic.com Message 11 in thread From: Pete (Pete@removebtclick.com) Subject: Re: quaternion puzzle Newsgroups: comp.graphics.algorithms Date: 2003-01-16 00:54:03 PST "John Blackburne" <johnb@hk.super.net> wrote in message news:johnb-1501032330570001@ppp-225-80-59.friaco.access.uk.tiscali.com... > > ........especially as u is a unit vector so du/dt is normal to it > and measures the rate of shift of axis: intuitively the more w and u point > in different directions the greater the magnitude of du/dt. > Is this necessarilly the case in general? Frx if u = (at +b) with a and b arbitrary vectors then u' is not orthognal to u even after normalisation is it ? We shouldn't confuse a time dependent vector with vectors derived from the same time dependent point (ie tangent and normal to a path). However I suspect this may be the case if u is of constant length and is cyclic such that u(t) = u(t + nk). Certainly u = cos(wt), sin(wt)/sqrt(2), sin(wt)/sqrt(2) is orthogonal to u' Can anyone shed some light on this? Pete Message 12 in thread From: Dave Eberly (eberly@magic-software.com) Subject: Re: quaternion puzzle Newsgroups: comp.graphics.algorithms Date: 2003-01-16 06:10:00 PST "Pete" <Pete@removebtclick.com> wrote in message news:b05rv8$fp6$1@knossos.btinternet.com... > > "John Blackburne" <johnb@hk.super.net> wrote in message > news:johnb-1501032330570001@ppp-225-80-59.friaco.access.uk.tiscali.com... > > > > ........especially as u is a unit vector so du/dt is normal to it > > and measures the rate of shift of axis: intuitively the more w and u point > > in different directions the greater the magnitude of du/dt. > > > > Is this necessarilly the case in general? > Frx if u = (at +b) with a and b arbitrary vectors > then u' is not orthognal to u even after normalisation is it ? For arbitrary a and b, a*t+b is not generally a unit vector. If u(t) is a unit vector for all t, then Dot(u(t),u(t)) = 1. Differentiate with respect to t to generate the equation Dot(u,du/dt) = 0 for all t. So du/dt is perpendicular to u. -- Dave Eberly eberly@magic-software.com http://www.magic-software.com http://www.wild-magic.com Post a follow-up to this message Message 13 in thread From: Pete (Pete@removebtclick.com) Subject: Re: quaternion puzzle View this article only Newsgroups: comp.graphics.algorithms Date: 2003-01-16 06:52:01 PST "Dave Eberly" <eberly@magic-software.com> wrote in message news:X2zV9.12982$Dq.1301052@newsread2.prod.itd.earthlink.net...
> "Pete" <Pete@removebtclick.com> wrote in message
>
> For arbitrary a and b, a*t+b is not generally a unit vector. If
> u(t) is a unit vector for all t, then Dot(u(t),u(t)) = 1. Differentiate
> with respect to t to generate the equation Dot(u,du/dt) = 0 for
> all t. So du/dt is perpendicular to u.
>

Yes that construction makes it obvious.

For some reason the result seems counter-intuitive to me; as though there
was some constraint on how I am allowed to moved a stick sound in space. But
I guess the constraint comes from the requirement that the stick is rigid.

Still seems counter-intuitive though ;(

Pete
Post a follow-up to this message

From: Jerzy Karczmarczuk (karczma@info.unicaen.fr)
Subject: Re: quaternion puzzle

Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 06:56:44 PST

Pete wrote:

>> ...If u(t) is a unit vector for all t, then Dot(u(t),u(t)) = 1. Differentiate
>>with respect to t to generate the equation Dot(u,du/dt) = 0 for
>>all t. So du/dt is perpendicular to u.
>>
>
>
> Yes that construction makes it obvious.
>
> For some reason the result seems counter-intuitive to me; as though there
> was some constraint on how I am allowed to moved a stick sound in space. But
> I guess the constraint comes from the requirement that the stick is rigid.
>
> Still seems counter-intuitive though ;(

I don't understand what is counter-intuitive here. It is exactly what
anybody would see and imagine. If you rotate a stick about its end by
a small angle, the displacement of the other end is orthogonal to the
stick. You SEE IT directly.

Jerzy Karczmarczuk
Post a follow-up to this message

From: Pete (Pete@removebtclick.com)
Subject: Re: quaternion puzzle

Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 07:50:04 PST

"Jerzy Karczmarczuk" <karczma@info.unicaen.fr> wrote in message
news:3E26C82B.4060900@info.unicaen.fr...
>
> Pete wrote:
>
> >
> > Still seems counter-intuitive though ;(
>
> I don't understand what is counter-intuitive here. It is exactly what
> anybody would see and imagine. If you rotate a stick about its end by
> a small angle, the displacement of the other end is orthogonal to the
> stick. You SEE IT directly.
>

Many thanks, I have now adjusted my mental model and intuition has been
fully restored ;-)

Pete

From: Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 03:31:28 PST

Dave Eberly <eberly@magic-software.com> wrote:
> Given a unit-length quaternion function q(t), you will find in
> various references the equation for the derivative
> (1) dq/dt = 0.5*w(t)*q(t)

The key to this may be that this is not an much of an equation, but
rather the _definition_ of the angular velocity quaternion, w(t), as
far as quaternion algebra is concerned.

> Anyone know how to resolve the differences here. In particular
> how does w(t) in equation (1) compare to (da/dt)*u(t) in equation
> (2),

I'd say it just doesn't. It's not as simple as that.

> and what to do about that extra term in equation (2)?

Accept it as a fact of life? ;-)

--
Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.

From: Dave Eberly (eberly@magic-software.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 06:21:45 PST

"Hans-Bernhard Broeker" <broeker@physik.rwth-aachen.de> wrote in message
news:b0656g$k5t$1@nets3.rz.RWTH-Aachen.DE...
> Dave Eberly <eberly@magic-software.com> wrote:
> > Given a unit-length quaternion function q(t), you will find in
> > various references the equation for the derivative
> > (1) dq/dt = 0.5*w(t)*q(t)
>
> The key to this may be that this is not an much of an equation, but
> rather the _definition_ of the angular velocity quaternion, w(t), as
> far as quaternion algebra is concerned.

As I mentioned in another post, the equivalent equation when using
an orientation matrix R(t) is dR/dt = S*R where S is a skew-symmetric
matrix built from the angular velocity vector W(t). In the rigid body
physics simulator, the angular velocity is determined by the current
angular momentum and inertia tensor. Its value is used to compute
the orientation matrix at the next time step. In this setting, (1) does
not "define" w(t).

> > Anyone know how to resolve the differences here. In particular
> > how does w(t) in equation (1) compare to (da/dt)*u(t) in equation
> > (2),
>
> I'd say it just doesn't. It's not as simple as that.
>
> > and what to do about that extra term in equation (2)?
>
> Accept it as a fact of life? ;-)

Come on, Hans. You normally have constructive responses
provide more than this. Help me out here :)

--
Dave Eberly
eberly@magic-software.com
http://www.magic-software.com
http://www.wild-magic.com

From: Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 07:21:15 PST

Dave Eberly <eberly@magic-software.com> wrote:
> "Hans-Bernhard Broeker" <broeker@physik.rwth-aachen.de> wrote in message
> news:b0656g$k5t$1@nets3.rz.RWTH-Aachen.DE...
>> Dave Eberly <eberly@magic-software.com> wrote:
>> > Given a unit-length quaternion function q(t), you will find in
>> > various references the equation for the derivative
>> > (1) dq/dt = 0.5*w(t)*q(t)
>>
>> The key to this may be that this is not an much of an equation, but
>> rather the _definition_ of the angular velocity quaternion, w(t), as
>> far as quaternion algebra is concerned.
> As I mentioned in another post, the equivalent equation when using
> an orientation matrix R(t) is dR/dt = S*R where S is a skew-symmetric
> matrix built from the angular velocity vector W(t).

Indeed. In tensor notation:

S_ij = epsilon_ijk * W^k # epsilon == Levi-Civita

> In the rigid body physics simulator, the angular velocity is
> determined by the current angular momentum and inertia tensor.

Neither of which goes into the equivalence problem at hand, does it?

> Its value is used to compute the orientation matrix at the next time
> step. In this setting, (1) does not "define" w(t).

But is that setting part of the puzzle at hand? I don't think so. Or
to turn it around: what, if not equation (1), is the definition of
w(t), then? Where does it come from, in the context of only this
puzzle? Why is this particular object,

w(t) = (dq/dt) * q^{-1}

an interesting thing that should be studied?

The puzzle has q(t), and two ways to write down its derivative
d/dt(q(t)). One of them is direct, the other introduces another
object, the angular velocity quaternion w(t), which has no other
qualities as far as q(t) is concerned.

Physicists would refer to your equation (3) as pure kinematics, i.e.
it's an equation that only deals with *how* a body moves around, but
now *why*: no forces, no masses, just positions, velocities, and time.
Dynamics, i.e. the "why", comes in from other parts of the machinery,
and it does so exactly through w(t).

Going back to your PDF, here are some points I don't quite buy, off-hand:

*) why should lim(h-->0, v(t,h)) = u(t)? u is the current orientation
axis, v is the axis around which the object currently
rotates. It's the axis of the *change* of orientation, which has no
direct link whatsoever to the current orientation itself.

Actually, I think the above limit is most likely undefined: it's the
direction of an infinitesimal rotation (h-->0 ==> \alpha --> 0).
In the limit, the transformation induced by p(t,h) is an identity.
Identity has no definable axis.

*) Where does the minus sign of the term

- (\dot{\theta}/2) * sin(\theta/2)

in the equation above (4) go to? I get

u*q = u * (u*sin(theta/2) + cos(theta/2))
= cos(theta/2)*u + u*u*sin(theta/2)
= cos(theta/2)*u + sin(theta/2)

There's no relative sign between the sin() and cos() terms, here.
u*q^{-1}, OTOH, would be a different matter. I.e. I get for
equation (4):

dq/dt = 1/2 (\dot{\theta}(t) u(t)) q^{-1}(t)
+ \dot{u}(t) sin(\theta(t)/2)

--
Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.

From: Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 08:02:37 PST

bug ;-(]

Dave Eberly <eberly@magic-software.com> wrote:
> "Hans-Bernhard Broeker" <broeker@physik.rwth-aachen.de> wrote in message
> news:b0656g$k5t$1@nets3.rz.RWTH-Aachen.DE...
>> Dave Eberly <eberly@magic-software.com> wrote:
>> > Given a unit-length quaternion function q(t), you will find in
>> > various references the equation for the derivative
>> > (1) dq/dt = 0.5*w(t)*q(t)
>>
>> The key to this may be that this is not an much of an equation, but
>> rather the _definition_ of the angular velocity quaternion, w(t), as
>> far as quaternion algebra is concerned.
> As I mentioned in another post, the equivalent equation when using
> an orientation matrix R(t) is dR/dt = S*R where S is a skew-symmetric
> matrix built from the angular velocity vector W(t).

Indeed. In tensor notation:

S_ij = epsilon_ijk * W^k # epsilon == Levi-Civita

> In the rigid body physics simulator, the angular velocity is
> determined by the current angular momentum and inertia tensor.

Neither of which goes into the equivalence problem at hand, does it?

> Its value is used to compute the orientation matrix at the next time
> step. In this setting, (1) does not "define" w(t).

But is that setting part of the puzzle at hand? I don't think so. Or
to turn it around: what, if not equation (1), is the definition of
w(t), then? Where does it come from, in the context of only this
puzzle? Why is this particular object,

w(t) = (dq/dt) * q^{-1}

an interesting thing that should be studied?

The puzzle has q(t), and two ways to write down its derivative
d/dt(q(t)). One of them is direct, the other introduces another
object, the angular velocity quaternion w(t), which has no other
qualities as far as q(t) is concerned.

Physicists would refer to your equation (3) as pure kinematics, i.e.
it's an equation that only deals with *how* a body moves around, but
now *why*: no forces, no masses, just positions, velocities, and time.
Dynamics, i.e. the "why", comes in from other parts of the machinery,
and it does so exactly through w(t).

Going back to your PDF, here are some points I don't quite buy, off-hand:

*) why should lim(h-->0, v(t,h)) = u(t)? u is the current orientation
axis, v is the axis around which the object currently
rotates. It's the axis of the *change* of orientation, which has no
direct link whatsoever to the current orientation itself.

Actually, I think the above limit is most likely undefined: it's the
direction of an infinitesimal rotation (h-->0 ==> \alpha --> 0).
In the limit, the transformation induced by p(t,h) is an identity.
Identity has no definable axis.

[Other issue removed by superseding article --- bug in my own
calculations ...]

What this all boils down to is that

w = \dot{\theta} * u + 2 * sin(\theta/2) * \dot{u} * q^{-1}
= \alpha_h(t,0) * v(t,0)

This poses no particular problems, since u need not be parallel to
v(t,0), so the additional term in the first equation is allowed to
modify it.

IOW: I don't see anything to be puzzled about.

--
Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.
--
Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.

From: Dave Eberly (eberly@magic-software.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 08:44:26 PST

"Hans-Bernhard Broeker" <broeker@physik.rwth-aachen.de> wrote in message
news:b06l2t$7l4$1@nets3.rz.RWTH-Aachen.DE...
> Going back to your PDF, here are some points I don't quite buy, off-hand:
>
> *) why should lim(h-->0, v(t,h)) = u(t)? u is the current orientation
> axis, v is the axis around which the object currently
> rotates. It's the axis of the *change* of orientation, which has no
> direct link whatsoever to the current orientation itself.

Yes, this is an error on my part. (1) becomes
dq/dt = 0.5*(alpha_h(t,0) v(t,0))*q
with w(t) = alpha_h(t,0) v(t,0) and (2) is
dq/dt = 0.5*(da/dt)*u(t)*q(t) + (du/dt)*sin(a/2)

> IOW: I don't see anything to be puzzled about.

Agreed. I am now unpuzzled.

> Actually, I think the above limit is most likely undefined: it's the
> direction of an infinitesimal rotation (h-->0 ==> \alpha --> 0).
> In the limit, the transformation induced by p(t,h) is an identity.
> Identity has no definable axis.

The construction in Kuipers' book is a bit informal and uses only the
notation v(t). But it really does depend on h, so I wrote it as v(t,h).
His construction does take a limit as h approaches zero, but because
he uses v(t), it appears that it is constant with respect to the limit
operation and can be factored outside the limit. I wanted to see a
more formal construction where you have to worry about taking the
limit of v(t,h). But if the limit of v(t,h) does not exist, his entire
construction (and mine) have problems. Intuitively the limit of v(t,h)
as h approaches zero is the direction vector for the "infinitesimal
rotation". You claim the limit does not exist. So how about a
correct mathematical construction that lets me take the limit as h
approaches zero? David Baraff's construction in the appendix of
the document I mentioned in the PDF has a flavor similar to
Kuipers' in that some approximations are made and limits taken.

I believe the end result, of course, but as a mathematician I'd like
to see a formal construction rather than these informal ones.
Specifically, I'd like to see the limit arguments applied to quantities
with no prior discarding of higher-order terms to make the
argument appear simpler. (I was hoping 'Just' andRon Levine
would contribute along these lines, given they are experts on this
topic :)

--
Dave Eberly
eberly@magic-software.com
http://www.magic-software.com
http://www.wild-magic.com

From: Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 09:36:52 PST

Dave Eberly <eberly@magic-software.com> wrote:

>> Actually, I think the above limit is most likely undefined: it's the
>> direction of an infinitesimal rotation (h-->0 ==> \alpha --> 0).
>> In the limit, the transformation induced by p(t,h) is an identity.
>> Identity has no definable axis.

[...]
> limit of v(t,h). But if the limit of v(t,h) does not exist, his entire
> construction (and mine) have problems.

I think I over-stated this. What certainly isn't defined is v(t,0)
itself. The limit(h-->0, v(t,h)) may still exist, though. It will,
for "well-behaved" motion (no fractals, no jumps, no collisions...).
So let's define v(t,0) by continuous extrapolation and continue:

lim(h-->0, (v(t,h)*sin(alpha(t,h)/2)) / h)

# using l'Hopital:
= lim(h-->0, (d/dh(v(t,h)) * sin(alpha(t,h)/2)
+ v(t,h) / 2 * cos(alpha(t,h)/2) * alpha_h(t,h)))

The first term is not present in your derivation. It corresponds to
the axis of rotation itself moving around.

> Intuitively the limit of v(t,h) as h approaches zero is the
> direction vector for the "infinitesimal rotation". You claim the
> limit does not exist.

On re-consideration, I drop that claim.

--
Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.

From: Dave Eberly (eberly@magic-software.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 10:17:20 PST

"Hans-Bernhard Broeker" <broeker@physik.rwth-aachen.de> wrote in message
news:b06qj4$dsp$1@nets3.rz.RWTH-Aachen.DE...
> I think I over-stated this. What certainly isn't defined is v(t,0)
> itself. The limit(h-->0, v(t,h)) may still exist, though. It will,
> for "well-behaved" motion (no fractals, no jumps, no collisions...).
> So let's define v(t,0) by continuous extrapolation and continue:
>
> lim(h-->0, (v(t,h)*sin(alpha(t,h)/2)) / h)
>
> # using l'Hopital:
> = lim(h-->0, (d/dh(v(t,h)) * sin(alpha(t,h)/2)
> + v(t,h) / 2 * cos(alpha(t,h)/2) * alpha_h(t,h)))
>
> The first term is not present in your derivation. It corresponds to
> the axis of rotation itself moving around.

If the limit of v(t,h) exists, then no need to apply l'Hopital's
rule on the full expression. The limit of a product is the
product of the limits, so
lim(h-->0, (v(t,h)*sin(alpha(t,h)/2))/h)
= lim(h-->0, v(t,h))*lim(h-->0,sin(alpha(t,h)/2))/h)
= v(t,0)*lim(h-->0,sin(alpha(t,h)/2))/h)
which is what I did in my construction.

--
Dave Eberly
eberly@magic-software.com
http://www.magic-software.com
http://www.wild-magic.com

From: Martin Baker
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 08:58:34 PST

Would you mind if I piggy-back a related question to yours?

It was triggered by the following from your question:

> where w(t) is a quaternion representing angular velocity.

I understood that angular velocity is usually represented by a 3D vector and
can be combined by vector addition.
Whereas angular position can be represented by a quaternion and can be
combined by quaternion multiplication.
As I understand it the rules for these operations are different, for
instance, vector addition is commutative whereas quaternion multiplication
is not, and these differences represent real differences in the ways that
angular velocity and angular position can be combined.

So my questions are:
Is it meaningful and useful to represent angular velocity as a quaternion?
What does quaternion multiplication or quaternion addition represent when
applied to a quaternion representing angular velocity.
How would one differentiate a quaternion representing angular position to
get a 3D vector representing angular velocity. (do you differentiate first
then convert to vector or convert to vector first?
How would one integrate a 3D vector representing angular velocity to get a
quaternion representing angular position.

Sorry to intrude on you question.

Martin

From: Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 09:42:46 PST

Martin Baker wrote:
> Would you mind if I piggy-back a related question to yours?

We would. You could at least have indicated it by amending the
Subject: line. But while you're here, here's an answer...

>> where w(t) is a quaternion representing angular velocity.
> I understood that angular velocity is usually represented by a 3D vector and
> can be combined by vector addition.

Not really. This is allowed only if the two angular velocity vectors
are parallel.

In the general case, angular velocities are every bit as complicated
to combine as fixed-angle rotations.

> Whereas angular position can be represented by a quaternion and can be
> combined by quaternion multiplication.

Or by matrices, and combined by matrix multiplication. Choose your
poison.

--
Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.

From: Just d' FAQs (nobody-here@mac.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 10:46:16 PST

I will attempt to be rigorous, but keep calculations to a minimum.

The geometric situation is as follows: the function q of t maps, say,
the unit real interval [0..1] to a path on the unit quaternion sphere.
We implicitly assume that the map has a derivative at the point in
question (as opposed to a discontinuity or cusp, say). Thus in the 4D
space of all quaternions we expect a vector which is tangent to the
unit sphere at the point in question, q(t0), and thus perpendicular to
q(t0).

A quaternion with zero as its scalar component may be identified with
a vector tangent to the identity, [(0,0,0),1]. Multiplying by q(t0)
rotates the sphere so that the identity moves to q(t0), and so that
tangent vector becomes a tangent to our desired point. The tangent to
any curve through our point has such a form, because we can span the
entire 3D tangent flat with such vectors.

So we can assert that

dq/dt = 0.5 v q

for some 3D vector function v(t). We must then convince ourselves that
we have something we can interpret as angular velocity. So let r be a
unit quaternion function giving a fixed axis rotation, and agreeing
with q in position and tangent at t0. For brevity, I will omit the
arguments relating the instantaneous angular velocity to the tangent
of r; but ask if that part's not clear.

Thus it seems we are left with the chore of convincing the tangent to
your q to appear in a form we know it must have. We make it this far
without explicit calculations, but no further. For variety, let's
exhibit q as a 4D vector function, splitting u into x, y, and z:

q = [(x sin(a/2), y sin(a/2), z sin(a/2)), cos(a/2)]

Then we have, simply as a 4D vector derivative,

q' = [(x' sin(a/2) + x a'/2 cos(a/2),
y' sin(a/2) + y a'/2 cos(a/2),
z' sin(a/2) + z a'/2 cos(a/2)),
- a'/2 sin(a/2)]

In terms of your u this is

q = [u sin(a/2), cos(a/2)]
q' = a'/2 [u cos(a/2), -sin(a/2)] + [u', 0] sin(a/2)

Since u X u = 0, and since u is a unit vector, this is your

q' = a'/2 [u, 0] q + [u', 0] sin(a/2)

The first term manifestly has the form of a pure vector times q; but
we *know* the variation in u must be a part of the correct answer, and
so the second term must be incorporated. Fortunately, we may again use
the fact that u is a unit vector, and deduce that u' is perpendicular
to u. So the second term is perpendicular to q in 4D; multiplying u'
by the inverse (equivalently, the conjugate) of q gives a pure vector.

[u' sin(a/2), 0] q* = [u X u' sin^2(a/2) + u' sin(a/2)cos(a/2), 0]

We conclude that the full tangent to q has the form 0.5 v q, where

v = u a' + 2 u X u' sin^2(a/2) + 2 u' sin(a/2)cos(a/2)

Using double angle formulae we might simplify this slightly to

v = u a' + (u X u') (1-cos(a)) + u' sin(a)

Perhaps it's worth pointing out that the three terms of v are all
mutually perpendicular. Still, it's not pretty; but then neither is
the choice of formula for q, so what can we expect, eh?

In deriving these results we have implicitly used quaternion multiply,

[v2, s2][v1, s1] = [v2 X v1 + v2 s1 + v1 s2, s2 s1 - v2 . v1]

Now just as a sanity check let's look at two simple versions of q.
First, look at 90 degree rotation around a fixed x axis at constant
speed. Then u and the derivative of a must be constant, so v is
constant, a fixed multiple of u, as expected.

Second, look at a Slerp from j to k, which in your terms would have
constant angle (180 degrees) and varying axis. This is 90 degree
rotation around a fixed x axis composed after a static 180 degree y
rotation. Hence we again expect v to be constant, (180 degrees, 0, 0).
Calculating explicitly,

a(t) = 180 degrees
u(t) = j cos(t 90 degrees) + k sin(t 90 degrees)
a'(t) = 0
u'(t) = (90 degrees)(j (-sin(t 90 degrees)) + k cos(t 90 degrees))
uXu' = (90 degrees) i (cos^2(t 90 degrees) + sin^2(t 90 degrees))
= (90 degrees) i
v(t) = u 0 + (90 degrees) i 2 + u' 0
= (180 degrees) i

In summary, we have accomplished three things: (1) We have shown that
the derivative of any unit quaternion curve q can be expressed in the
form 0.5 v q, where v is a pure vector function. (2) We have given an
explicit expression for v when q is given in axis-angle form. (3) We
have verified that we get the expected results for two test cases.

For the hardy few who may still be reading, I really did try to keep
calculations to a minimum! I trust the results are satisfactory.

On Wed, 15 Jan 2003 21:56:57 GMT, "Dave Eberly"
<eberly@magic-software.com> wrote:
>Given a unit-length quaternion function q(t), you will find in
>various references the equation for the derivative
>(1) dq/dt = 0.5*w(t)*q(t)
>where w(t) is a quaternion representing angular velocity.
>However, if you write q(t) = cos(a(t)/2)+u(t)*sin(a(t)/2)
>and differentiate directly, you get
>(2) dq/dt = 0.5*(da/dt)*u(t)*q(t) + (du/dt)*sin(a/2)
>
>Since ASCII math is hard to do, I uploaded
>http://www.magic-software.com/Temp/QuaternionPuzzle.pdf
>that shows a derivation of (1) similar to one in document of
>David Baraff and to the one in Jack Kuiper's book on
>quaternions. I also show the derivation of (2) and mention
>a couple of online papers that agree with this version.
>
>Anyone know how to resolve the differences here. In particular
>how does w(t) in equation (1) compare to (da/dt)*u(t) in equation
>(2), and what to do about that extra term in equation (2)?

From: Dave Eberly (eberly@magic-software.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 12:01:50 PST

"Just d' FAQs" <nobody-here@mac.com> wrote in message
news:d6lc2vkotdve3kius8j6cuvmte63j7gvbd@4ax.com...
> I will attempt to be rigorous, but keep calculations to a minimum.
<snip>

This is the spirit of what I was looking for.

> ... Fortunately, we may again use
> the fact that u is a unit vector, and deduce that u' is perpendicular
> to u. So the second term is perpendicular to q in 4D; multiplying u'
> by the inverse (equivalently, the conjugate) of q gives a pure vector.
>
> [u' sin(a/2), 0] q* = [u X u' sin^2(a/2) + u' sin(a/2)cos(a/2), 0]

This is the part missing from my analysis of the problem originally.
I failed to notice the "pure vector" constraint which would have
allowed me to factor dq/dt = (pure_vector)*q.

--
Dave Eberly
eberly@magic-software.com
http://www.magic-software.com
http://www.wild-magic.com

From: Pete (Pete@removebtclick.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-16 14:06:02 PST

"Just d' FAQs" <nobody-here@mac.com> wrote in message
news:d6lc2vkotdve3kius8j6cuvmte63j7gvbd@4ax.com...
> I will attempt to be rigorous, but keep calculations to a minimum.
>
> The geometric situation is as follows: the function q of t maps, say,
> the unit real interval [0..1] to a path on the unit quaternion sphere.
> We implicitly assume that the map has a derivative at the point in
> question (as opposed to a discontinuity or cusp, say). Thus in the 4D
> space of all quaternions we expect a vector which is tangent to the
> unit sphere at the point in question, q(t0), and thus perpendicular to
> q(t0).
>
> A quaternion with zero as its scalar component may be identified with
> a vector tangent to the identity, [(0,0,0),1]. Multiplying by q(t0)
> rotates the sphere so that the identity moves to q(t0), and so that
> tangent vector becomes a tangent to our desired point. The tangent to
> any curve through our point has such a form, because we can span the
> entire 3D tangent flat with such vectors.
>
> So we can assert that
>
> dq/dt = 0.5 v q
>

FWIW, a less geometric way of arriving at this result is to begin with the
fact that

q q* = 1
diff both sides wrt t
q' q* + q q*' = 0
q' q* = -q q*'
q' q* = -(q* q')*

which implies that q'q* has no scalar part (ie a pure vector or bivector

In any event we can now put
q'q* = v
q' = vq

If you don't like mixing vectors and quats then just add the padding

Pete

From: Just d' FAQs (nobody-here@mac.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-17 01:09:34 PST

On Thu, 16 Jan 2003 22:06:00 +0000 (UTC), "Pete"
<Pete@removebtclick.com> wrote:
>FWIW, a less geometric way of arriving at this result is to begin with the
>fact that
>
>q q* = 1
>diff both sides wrt t
>q' q* + q q*' = 0
>q' q* = -q q*'
>q' q* = -(q* q')*
>
>which implies that q'q* has no scalar part (ie a pure vector or bivector

Didn't you claim to be an advocate of geometric algebra? I would have
thought you'd prefer more geometry and less algebra! ;-)

In any case, that last equation should properly read
q' q* = -(q' q*)*
because the conjugate of ab is b*a*. Thus we can now better follow
your conclusion; from a = -a* we obtain a+a* = 0, which is twice the
scalar part of a = q' q*.

However, I'm trying to establish more than an algebraic result. There
is the puzzling question of how an apparently 3D vector representing
angular velocity relates to a 4D unit quaternion. So I'm introducing
the idea that a pure vector quaternion lies in the tangent flat at the
identity, and that any flat tangent to the quaternion unit sphere can
be obtained from that archetype by multiplication. This idea is
powerful, with echoes in Lie geometry and Lie algebra. Best of all, it
helped Dave find the insight he sought.

That said, you repeat a theme seen several times in this thread, one
worth stating explicitly: Whenever we have a constraint equation, its
derivative tends to say interesting and useful things as well.

Dave said
u.u = 1 implies u'.u = 0
You said
q q* = 1 implies Scalar(q' q*) = 0
For rotation matrices
Q Q^T = I implies Q' + Q'^T = 0 (meaning Q' is skew)
and
det(Q) = 1 implies trace(Q') = 0

Clearly this is a handy tool for one's bag of tricks!

From: Pete (Pete@removebtclick.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-17 02:04:02 PST

"Just d' FAQs" <nobody-here@mac.com> wrote in message
news:00ff2v4ltiocn256dp1f1go1vr7mdi2b5m@4ax.com...

>
> Didn't you claim to be an advocate of geometric algebra? I would have
> thought you'd prefer more geometry and less algebra! ;-)
>

Well I got the impression it wasn't that popular around here.

It does seem to polarise opionion. Hestenes and the crowd at
Cavendish/Cambridge seem dedicated to completely reworking the whole of
mathematical science in terms of GA. This seems to have provoked a bit of a
backlash in some quarters (notably theoretical physics). And of course one
the main advocates of GA on Usenet (the late Pertti) was known for his very
adverserial style which certainly rubbed a lot of people up the wrong way.

I certainly like GA as an analysis tool. I'm not yet entirely convinced
about the implementation side but then again, it's all just machine code at
the end of the day.

As for more geometry, well I did enjoy your tangent to a 4D sphere and I was
enlightened by Jerzy shaking a rigid stick at me. But mental pictures can be
misleading and a formal algebraic proof is usually to be preferred. I
remember looking at the definitive works on Differential Geometry by
Kobayasi & Nimitzu and being amazed that they didn't contain a single
diagram or figure ;-)

> In any case, that last equation should properly read
> q' q* = -(q' q*)*

Yes, sorry about that slip, it was late.

>
> Dave said
> u.u = 1 implies u'.u = 0
> You said
> q q* = 1 implies Scalar(q' q*) = 0
> For rotation matrices
> Q Q^T = I implies Q' + Q'^T = 0 (meaning Q' is skew)
> and
> det(Q) = 1 implies trace(Q') = 0
>
> Clearly this is a handy tool for one's bag of tricks!
>

Many thanks, I am often amazed at how effective a learning experience Usenet
can be.

Pete

From: Just d' FAQs (nobody-here@mac.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-18 12:36:57 PST

Personally, I welcome diverse ways of approaching a question. Bring on
your Clifford/Geometric Algebra, quaternions, matrix exponentials, Lie
groups, or whatever works for you. I'll exert a little back pressure
when anyone claims absolute superiority for any chosen technology; but
we learn a great deal by fresh looks at facts. The geometry of Euclid
and Pythagoras is still lovely, but we learned much from Descartes,
Bolyai, and Riemann. Calculus based on epsilon-delta style theory has
certainly proved its worth, but Abraham Robinson's approach based on
logic was an intriguing vindication of the intuitions of Leibnitz and
Newton. And I'll end my paean to diversity
(<http://dictionary.reference.com/search?q=paean>)
by pointing out that at the very foundations of mathematics, the set
theory approach put to such dramatic use by Bourbaki has a modern
rival in topos theory.

After such a litany of highfalutin mathematics, I feel obliged to add
that our readers in this newsgroup include both high school students
and high class professors, so efforts to make your contributions
interesting and informative to both ends will be much appreciated.

(On a sociological note, yes it's a pity that we judge the appeal of a
theory by the appeal of its advocates, but that's usually a temporary
situation.)

On Fri, 17 Jan 2003 10:03:13 +0000 (UTC), "Pete"
<Pete@removebtclick.com> wrote:
>> Didn't you claim to be an advocate of geometric algebra? I would have
>> thought you'd prefer more geometry and less algebra! ;-)
>>
>
>Well I got the impression it wasn't that popular around here.
>
>It does seem to polarise opionion. Hestenes and the crowd at
>Cavendish/Cambridge seem dedicated to completely reworking the whole of
>mathematical science in terms of GA. This seems to have provoked a bit of a
>backlash in some quarters (notably theoretical physics). And of course one
>the main advocates of GA on Usenet (the late Pertti) was known for his very
>adverserial style which certainly rubbed a lot of people up the wrong way.
>
>I certainly like GA as an analysis tool. I'm not yet entirely convinced
>about the implementation side but then again, it's all just machine code at
>the end of the day.
>
>As for more geometry, well I did enjoy your tangent to a 4D sphere and I was
>enlightened by Jerzy shaking a rigid stick at me. But mental pictures can be
>misleading and a formal algebraic proof is usually to be preferred. I
>remember looking at the definitive works on Differential Geometry by
>Kobayasi & Nimitzu and being amazed that they didn't contain a single
>diagram or figure ;-)

From: Jerzy Karczmarczuk (karczma@info.unicaen.fr)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-17 00:51:05 PST

Just d' FAQs wrote:

> A quaternion with zero as its scalar component may be identified with
> a vector tangent to the identity, [(0,0,0),1]. Multiplying by q(t0)
> rotates the sphere so that the identity moves to q(t0), and so that
> tangent vector becomes a tangent to our desired point. The tangent to
> any curve through our point has such a form, because we can span the
> entire 3D tangent flat with such vectors.
>
> So we can assert that
>
> dq/dt = 0.5 v q
>
> for some 3D vector function v(t).
.......

Pete wrote:

> FWIW, a less geometric way of arriving at this result is to begin with the
> fact that
>
> q q* = 1
> diff both sides wrt t
> q' q* + q q*' = 0
> q' q* = -q q*'
> q' q* = -(q* q')*
>
> which implies that q'q* has no scalar part (ie a pure vector or bivector
>
> In any event we can now put
> q'q* = v
> q' = vq

============

May I?

Suppose:
q(t) = cos(a(t)/2)+u(t)*sin(a(t)/2) as we would like it.

Here u is a unit-length, null-scalar quaternion, equivalent to a 3-vector.
We know that u^2 = -1.

Why can't we use the trick used for eons in the context of the rotation
group representations by Pauli matrices?

Define b=a/2
Simply:
q(t) = exp(b*u)
= 1 -b^2/2! + b^4/4! - ... [times a quat. unity]
+ b - b^3/3! + b^5/5! - ... [times u]

= cos(b) + u*sin(b) as expected.

Now, look at the exponential form and differentiate it yourself.

Jerzy Karczmarczuk

From: Pete (Pete@removebtclick.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-17 02:46:01 PST

"Jerzy Karczmarczuk" <karczma@info.unicaen.fr> wrote in message
news:3E27C3F8.5020108@info.unicaen.fr...
>
> ============
>
> May I?
>
> Suppose:
> q(t) = cos(a(t)/2)+u(t)*sin(a(t)/2) as we would like it.
>
> Here u is a unit-length, null-scalar quaternion, equivalent to a 3-vector.
> We know that u^2 = -1.
>
> Why can't we use the trick used for eons in the context of the rotation
> group representations by Pauli matrices?
>
> Define b=a/2
> Simply:
> q(t) = exp(b*u)
> = 1 -b^2/2! + b^4/4! - ... [times a quat. unity]
> + b - b^3/3! + b^5/5! - ... [times u]
>
> = cos(b) + u*sin(b) as expected.
>
> Now, look at the exponential form and differentiate it yourself.
>

Yes this is a neat formulation and is one that is used extensively in
geometric algebra where there are a variety of geometric versions of
sqrt(-1). I think you still need to apply qq*=1 though for Dave's question
which seems strange as the formulation q = exp(b*u) makes this implicit
since qq* becoms exp(b*u) * exp(-b*u) = exp(0) = 1.

One of the things that really attracted me to GA was its ability to produce
a wave solution to a Pauli/Shrodinger equation which was completely real and
in which it was clear that the previous use of the unit imaginary was just
the electron spin in disguise. I'd been struggling to get my head round that
for some years and GA did it for me almost imediately.

Pete

From: Fred Klingener (GigaBitBucket@yahoo.com)
Subject: Re: quaternion puzzle
Newsgroups: comp.graphics.algorithms
Date: 2003-01-17 12:16:08 PST

Many thanks to the OP and to all of the people who contributed to this
thread. It was certainly packed by weight, one of the chewiest and most
nourishing in a long time.

I certainly don't have it all digested yet, but I'll keep working on it.

Fred Klingener