Upload
magdalen-woods
View
235
Download
1
Tags:
Embed Size (px)
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
cß
Spherical Trigonometry
Same formula, but a,b,c arearc lengths
a b
c
ß