Quaternions - TAMU Computer Science Faculty Pages

advertisement
CPSC 641: Computer Graphics
Rotation Representation and
Interpolation
Jinxiang Chai
Joints and Rotation
Rotational dofs are widely used in character animation
3 translation dofs
48 rotational dofs
1 dof: knee
2 dof: wrist
3 dof: shoulder
Orientation vs. Rotation
• Orientation is described relative to some reference
alignment
• A rotation changes object from one orientation to another
• Can represent orientation as a rotation from the
reference alignment
Ideal Orientation Format
• Represent 3 degrees of freedom with
minimum number of values
• Allow concatenations of rotations
• Math should be simple and efficient
– concatenation
– interpolation
– rotation
Outline
•
•
•
•
Rotation matrix
Fixed angle and Euler angle
Axis angle
Quaternion
Matrices as Orientation
• Matrices just fine, right?
• No…
– 9 values to interpolate
– don’t interpolate well
Representation of orientation
Homogeneous coordinates (review):
– 4X4 matrix used to represent translation,
scaling, and rotation
– a point in the space is represented as
 x
 y
P 
z
 
1 
– Treat all transformations the same so that they
can be easily combined
Rotation
New points rotation matrix old points
Interpolation
• In order to “move things”, we need both
translation and rotation
• Interpolating the translation is easy, but
what about rotations?
Interpolation of Orientation
• How about interpolating each entry of the
rotation matrix?
• The interpolated matrix might no longer be
orthonormal, leading to nonsense for the
inbetween rotations
Interpolation of Orientation
Example: interpolate linearly from a positive 90 degree
rotation about y axis to a negative 90 degree rotation
about y
0
0

 1

0
0 1 0
1 0 0
0 0 0

0 0 1
Rotate about y-axis
with 90
0
0

1

0
0  1 0
1 0 0
0 0 0

0 0 1
Rotate about y-axis
with -90
Linearly interpolate each component and halfway
between, you get this...
0
0

0

0
0 0 0
1 0 0
0 0 0

0 0 1
Properties of Rotation Matrix
Easily composed?
Interpolation?
Compact representation?
Properties of Rotation Matrix
Easily composed? yes
Interpolation?
Compact representation?
Properties of Rotation Matrix
Easily composed? yes
Interpolation? not good
Compact representation?
Properties of Rotation Matrix
Easily composed? yes
Interpolation? not good
Compact representation?
- 9 parameters (only needs 3 parameters)
Outline
•
•
•
•
Rotation matrix
Fixed angle and Euler angle
Axis angle
Quaternion
Fixed angles
• Angles are used to rotate about fixed axes
• Orientations are specified by a set of 3 ordered
parameters that represent 3 ordered rotations
about fixed axes
• Many possible orderings: x-y-z, x-y-x,y-x-z
- as long as axis does immediately follow itself such as x-x-y
Fixed angles
Ordered triple of rotations about
global axes, any triple can be used
that doesn’t immediately repeat
an axis, e.g., x-y-z, is fine, so is xy-x. But x-x-z is not.
Y
Z
E.g., (qz, qy, qx)
Q = Rx(qx). Ry(qy). Rz(qz). P
X
Euler Angles vs. Fixed Angles
One point of clarification
Euler angle
- rotates around local axes
Fixed angle
- rotates around world axes
Rotations are reversed
- x-y-z Euler angles == z-y-x fixed angles
Euler angle Interpolation
• Interpolating each component separately
• Might have singularity problem
– Halfway between (0, 90, 0) & (90, 45, 90)
– Interpolate directly, get (45, 67.5, 45)
– Desired result is (90, 22.5, 90) (verify this!)
Euler angle concatenation
• Can't just add or multiply components
• Best way:
– Convert to matrices
– Multiply matrices
– Extract Euler angles from resulting matrix
• Not cheap
Gimbal lock
• Euler/fixed angles not well-formed
• Different values can give same rotation
• Example with z-y-x fixed angles:
– ( 90, 90, 90 ) = ( 0, 90, 0 )
Gimbal lock
• Euler/fixed angles not well-formed
• Different values can give same rotation
• Example with z-y-x fixed angles:
– ( 90, 90, 90 ) = ( 0, 90, 0 )
z
x
y
Gimbal lock
• Euler/fixed angles not well-formed
• Different values can give same rotation
• Example with z-y-x fixed angles:
– ( 90, 90, 90 ) = ( 0, 90, 0 )
z
z
(90,0,0)
x
y
y
x
Gimbal lock
• Euler/fixed angles not well-formed
• Different values can give same rotation
• Example with z-y-x fixed angles:
– ( 90, 90, 90 ) = ( 0, 90, 0 )
z
z
(90,0,0)
x
y
(90,90,0)
y
y
x
z
x
Gimbal lock
• Euler/fixed angles not well-formed
• Different values can give same rotation
• Example with z-y-x fixed angles:
– ( 90, 90, 90 ) = ( 0, 90, 0 )
z
z
(90,0,0)
x
y
(90,90,0)
(90,90,90)
z
y
y
x
z
y
x
x
Gimbal lock
• A Gimbal is a hardware implementation of
Euler angles used for mounting
gyroscopes or expensive globes
• Gimbal lock is a basic problem with
representing 3D rotation using Euler
angles or fixed angles
Gimbal lock
• When two rotational axis of an object pointing
in the same direction, the rotation ends up
losing one degree of freedom
Outline
•
•
•
•
Rotation matrix
Fixed angle and Euler angle
Axis angle
Quaternion
Axis angle
Rotate an object by q
around A
(Ax,Ay,Az,q)
A
q
Y
Z
X
Euler’s rotation theorem: An arbitrary rotation
may be described by only three parameters.
Axis-angle rotation
Given
r – Vector in space to rotate
n – Unit-length axis in space about which to rotate
q – The amount about n to rotate
Solve
r’ – The rotated vector
n r
r’
Axis-angle rotation
• Compute rpar: the projection of r along the
n direction
rpar = (n·r)n
rpar
r’
r
Axis-angle rotation
• Compute rperp: rperp = r-rpar
rpar
rperp
r
r’
Axis-angle rotation
• Compute v: a vector perpedicular to rpar
and rperp: v= rparxrperp
v
rpar
rperp
r
r’
Axis-angle rotation
• Compute v: a vector perpedicular to rpar
and rperp: v= rparxrperp
v
Use rpar, rperp and v, θ to
compute the new vector!
rpar
rperp
r
r’
Axis-angle rotation
rperp = r – (n·r) n
q
r’
r
V = n x (r – (n·r) n) = n x r
rpar = (n·r) n
n
r’ = r’par + r’perp
= r’par + (cos q) rperp + (sin q) V
=(n·r) n + cos q(r – (n·r)n) + (sin q) n x r
= (cos q)r + (1 – cos q) n (n·r) + (sin q) n x r
Axis-angle rotation
• Can interpolate rotation well
Axis-angle interpolation
A1
q1
A
Y
q
A1 x A2
Z
q2
A2
1. Interpolate axis
from A1 to A2 Rotate
axis about A1 x A2 to
get A
2. Interpolate angle from
q1 to q2 to get q
X
3. Rotate the object by
q around A
Axis-angle rotation
• Can interpolate rotation well
• Compact representation
• Messy to concatenate
- might need to convert to matrix form
Outline
•
•
•
•
Rotation matrix
Fixed angle and Euler angle
Axis angle
Quaternion
Quaternion
Remember complex numbers: a+ib, where i2=-1
Quaternions are a non-commutative extension of
complex numbers
Invented by Sir William Hamilton (1843)
Quaternion:
- Q = a + bi + cj + dk: where i2=j2=k2=ijk=-1,ij=k,jk=i,ki=j
- Represented as: q = (w, v) = w + xi + yj + zk
Quaternion
• 4 tuple of real numbers: w, x, y, z
• Same information as axis angles but
in a more computational-friendly form
Quaternion math
Unit quaternion
Multiplication
Non-commutative
Associative
Quaternion math
Conjugate
Inverse
Quaternion Example
let
then
Quaternion Rotation
Quaternion rotation
Quaternion Example
• Rotate a point (1,0,0) about y-axis with
-90 degrees
z
(0,0,1)
y
x
(1,0,0)
Quaternion Example
• Rotate a point (1,0,0) about y-axis with
-90 degrees
z
(0,0,1)
y
x
(1,0,0)
0
1
0
 
 90
 90  
 90
 90   *
(cos
, sin
, sin
 1 )(0,  0 )(cos
 1 )
2
2  
2
2
0
0
0
 
 
0
 
 (0,  0 )
  1
 
Quaternion Example
• Rotate a point (1,0,0) about y-axis with
90 degrees
z
(0,0,1)
y
x
(1,0,0)
0
1
0
 
 90
 90  
 90
 90   *
(cos
, sin
, sin
 1 )(0,  0 )(cos
 1 )
2
2  
2
2
0
0
0
 
 
0
 
 (0,  0 )
  1
Point (1,0,0)
 
Quaternion Example
• Rotate a point (1,0,0) about y-axis with
90 degrees
z
(0,0,1)
y
x
(1,0,0)
0
1
0
 
 90
 90  
 90
 90   *
(cos
, sin
, sin
 1 )(0,  0 )(cos
 1 )
2
2  
2
2
0
0
0
 
 
0
 
 (0,  0 )
  1
Point (1,0,0)
 
Quaternion rotation
Quaternion Example
• Rotate a point (1,0,0) about y-axis with
90 degrees
z
(0,0,1)
y
x
(1,0,0)
0
1
0
 
 90
 90  
 90
 90   *
(cos
, sin
, sin
 1 )(0,  0 )(cos
 1 )
2
2  
2
2
0
0
0
 
 
0
 
 (0,  0 )
1
 
Quaternion composition
Rotation by p then q is the same as rotation
by qp
Rot q (Rot p (v))  Rot q ( p0 v  p1 )
 qp0 v p1q1
 qp0 v (qp)1
 Rot qp (v)

Matrix Form
For a 3D point (x0,y0,z0)
0
 x' 
 
 
 x0  1
 y' 
 z '   q y  q
 0
 
1
z 
 
 0
 x' 
 x0 
 
 
 y' 
 y0 
 z '   R(q) z 
 
 0
1
1
 
 
Quaternion interpolation
1-angle rotation can be
represented by a unit circle
Quaternion interpolation
1-angle rotation can be
represented by a unit circle
2-angle rotation can be
represented by a unit sphere
Quaternion interpolation
1-angle rotation can be
represented by a unit circle
2-angle rotation can be
represented by a unit sphere
• Interpolation means moving on n-D
sphere
• Now imagine a 4-D sphere for 3-angle
rotation
Quaternion interpolation
Moving between two points on the 4D unit
Sphere:
• a unit quaternion at each step - another point
on the 4D unit sphere
• move with constant angular velocity along the
great circle between the two points on the 4D
unit sphere
Quaternion interpolation
Direct linear interpolation does not work
Linearly interpolated intermediate points
are not uniformly spaced when projected
onto the circle
Quaternion interpolation
Spherical linear interpolation (SLERP)
Normalize to regain unit quaternion
Quaternion interpolation
Spherical linear interpolation (SLERP)
Normalize to regain unit quaternion
Quaternion interpolation
Spherical linear interpolation (SLERP)
Normalize to regain unit quaternion
Quaternions
• Can interpolate rotation well
• Compact representation
• Also easy to concatenate
Download