Animating Rotations and Using Quaternions. What We’ll Talk About Animating Translation Animating...

Preview:

Citation preview

Animating Rotations and Using Quaternions

What We’ll Talk About

• Animating Translation

• Animating 2D Rotation

• Euler Angle representation

• 3D Angle problems

• Quaternions

• Animating with quaternions

Review: Translation

P = X Y Z 1

T =

1 tx 1 ty 1tz 1

P’ = TP = x + txy + tyz + tz 1

Animation: interpolate over tx,ty,tz in T

Move from (10,20,30) to (10,50,40), in time = 0 to 10

∆x = (50-20)/10 ∆y = (40-30)/10

1 10 1 20 130 1

1 10 1 23 131 1

1 10 1 26 132 1

1 10 1 50 140 1

Time = 0 Time = 1 Time = 2 Time = 10

Translation2D Rotation3D RotationEulerProblemsQuaternionsQ. Animation

Review: 2D Rotation2D Rotation3D RotationEulerProblemsQuaternionsQ. Animation

R =

cos Ө -sin Ө sin Ө cos Ө

1

P’ = RP Ө

Animating 2D Rotations

time Rotation

0 0

3 90

Number of frames: 3∆R = (90-0)/3 = 30

cos 0 -sin 0 sin 0 cos 0

1

cos 30 -sin 30 sin 30 cos 30

1

cos 60 -sin 60 sin 60 cos 60

1

cos 90 -sin 90 sin 90 cos 90

1

Review: 3D Rotations3D RotationEulerProblemsQuaternionsQ. Animation

Rx =

1 cos Ө -sin Ө sin Ө cos Ө

1

Ry =

cos Ө sin Ө 1 -sin Ө cos Ө

1

Rz =

cos Ө -sin Ө sin Ө cos Ө 1

1

Orientation specified by a combination of rotations in a predetermined order: RxRyRz

Euler Angles

• Euler’s Theorem: any orientation can be expressed as a single rotation about an axis

• Can lead to Gimbal lock• Gives you the basic idea• Euler representation is good basis for calculating

quaternions, which work well• Ideas:

– Orientation represented by an angle and an (x,y,z) vector, e.g. (A1, Ө1)

– Axes represent local coordinate system, not global

• Rotation order is reverse of global, i.e. RzRyRx

EulerQuaternionsQ. Animation

• Determine axis of rotation from 1st line a to second line b: cross product a x b

• Determine angle between linesdot product = |a| |b| cos ØØ = acos ( a b/ (|a||b|) )

note: normalized angle• Animation with k = 0..1 :

axisk = rotate(k Ø ) a anglek = (1-k)Ө1 +kӨ2

EulerQuaternionsQ. AnimationEuler Angles

Ø

Ө1

Ө2

Can you do it?

• Line 1: P1 = (0,1,0) P2 = (1,0,1)• Line 2: Q1 = (1,1,1) Q2 = (3,3,3)• Cross product:

(-4,0,-4) • acos a•b/|a||b|

acos(2/(√3 * 2√3) = acos(1/3) = 70.5 degrees

x y z

1 -1 1

2 2 2

Motivation

• We would like to represent 3D rotations about an arbitrary axis

• We would like to be able to apply a series of arbitrary rotations and have it actually work..– Direct interpolation of matrices leads to

nonsense– Gimbal lock occurs when the axes of two of the three gimbals needed to compensate for rotations in 3D space are driven to the same direction, e.g. (0,90,0)

ProblemsEulerQuaternionsQ. Animation

What is a quaternion?

• Alternative to Euler angles for specifying orientation

• 4-tuple: use 3 numbers for axis of rotation + 1 for angle of rotation

• Let q be a quaternion:q = s,v

= s, vx, vy, vz

= s + vxi + vyj + Vzk

QuaternionsQ. Animation

Quaternion algebra

A. i2 = j2 = k2 = -1 = i-j-kB. ij = k = -ji

jk = i = -kj ki = j = -ik

C. q1 + q2 = (s1 + s2, v1 + v2)

D. q1*q2 = q3

if s1 = s2 = 0, then q3 = (v1•v2 ,v1 x v2)

general: q3 = (s1s2- v1•v2, s1v2 +s2v1 + v1x v2 )

E. q1•q2 = (s1s2 + v1•v2)

Quaternions are like complex numbers, with one normal component and 3 imaginary components, i,j,k.

(a+bi)(c+di) = (ac-bd) +(cb-ad)i

QuaternionsQ. Animation

Not all Quaternions Represent Rotations

• Only unit-length quaternions are rotations• || q || = sqrt( s2 + v v) = 1• q = 1/||q|| [s,v]• q-1 = 1/||q||2 [s,-v]• The inverse rotation is rotation by the

same amount by the negative axis• Unit quaternion defined by

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

QuaternionsQ. Animation

Suppose I had an Euler Rotation…

1. q = (cos Ө/2, sin Ө/2[x,y,z]) where Ө and (x,y,z) are the Euler angle and axis respectively

2. Normalize using quaternion normalization rules: q

Note:

q = -q = (-s,-v)

= cos (-Ө/2), sin(-Ө/2)[-x,-y,-z]

= cos (Ө/2), -sin(Ө/2)[-x,-y,-z]

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

QuaternionsQ. Animation

Convert Q to matrix form

M = 1-2y2-2z2 2xy + 2sz 2xy -2sy 2xy + 2sz 1-2x2-2z2 2yz – 2sx

2xz – 2sy 2yz – 2sx 1-2x2-2y2

QuaternionsQ. Animation

Rotating a point p by q

• Rq(p) = q p q

where q = [s,-v] (conjugate of q)

where p = [0,(px, py, pz)]

Rq(p) = [s,v][0,p][s,-v]

=[0,(s2-v v)p + 2v(v p) +2s(v x p)]

QuaternionsQ. Animation

Consecutive Rotations

• R2(R1(p))

• q2(q1 p q1)q2 = (q2 q1) p (q2 q1)

• =R21(p)

• Very convenient…

Note about conjugates

• q = [s,-v]

• q-1= 1/|q|2 q (normalize!!)

• For unit quaternions, q-1= q

Animating Rotations Using Quaternions

• How to find intermediate rotations?

A. Linear interpolation:lerp( q1, q2, u) = q1(1-u) + uq2

• Advantage: easier to find q’ vs. animating rotation matrix

• Problem: will speed up in the midst of rotation

Ө

q1

q2

q: point on a 4D unit sphere

Animating Rotations Using Quaternions

B. Spherical Interpolationslerp( q1, q2, u) = [sin(1-u) Ө/sin Ө ] q1 + [sin uӨ/sin Ө ] q2

Where q1•q2 = cos Ө (note: use smaller Ө )

Why?

Plane trigonometry

a = b = c

sin sin ß sin

a b

Spherical Trigonometry

Same formula, but a,b,c arearc lengths

a b

c

ß

Recommended