Rotation
Wanho Choi (wanochoi.com)
Orthonormal Matrix
An×n = x| |1 x2 ⋯ x|n
| | |
xi : the i-th column vector of A (i : 1,2,⋯, n) xi ⋅ xj = {0 if i ≠ j1 if i = j AAT = (AT A)T = IT = I ATA = − x1 − − x2 − ⋮ − xn − | | | x1 x2 ⋯ xn | | | = x1 ⋅ x1 x1⋅ x2 ⋯ x1⋅ xn x2 ⋅ x1 x2⋅ x2 ⋯ x2⋅ xn ⋮ ⋮ ⋱ ⋮ xn ⋅ x1 xn⋅ x2 ⋯ xn⋅ xn = 1 0 ⋯ 0 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 = I
Inverse & Determinant
AA
T
= A
T
A = I
∵ A
T= IA
T= (A
−1A)A
T= A
−1(AA
T) = A
−1I = A
−1∴ A
−1
= A
T
∵ 1 = det(I) = det(AA
T) = det(A)det(A
T) = det(A)
2Rotation Matrix
• (rotation matrix) ⟺ (orthonormal matrix w/ det=1)
R = r11 r12 r13 r21 r22 r23 r31 r32 r33 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ RRT = RTR = I RT = R−1 det(R) = 1 ri ⋅rj = riTrj = 0 i
(
≠ j & i, j = 0,1,2)
1 i(
= j & i, j = 0,1,2)
⎧ ⎨ ⎪ ⎩⎪ R = | | | r0 r1 r2 | | | ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥Rotation Matrix
• (rotation matrix) ⟺ (orthonormal matrix w/ det=1)
• proof) Ax 2 = Ax( )T( )Ax = xTATAx = xT
( )
ATA x = xTIx = xTx = x 2 x+ y 2 = x + y( )T(x+ y)= xTx+ 2xTy+ yTy = x 2 + 2xTy+ y 2 similarly, A x( + y) 2 = Ax + Ay 2 = Ax + Ay( )T(Ax + Ay) = Ax 2 + 2 Ax( )T( )Ay + Ay 2 = x 2 + 2 Ax( )T Ay ( )+ y ∴ Ax 2 = x 2 ∴ Ax( )T Ay ( ) = xT y : angle preservation : length preservationRotation Matrix
• (rotation matrix) ⟺ (orthonormal matrix w/ det=1)
• example)
det
([cosθ −sinθsinθ cosθ ]) = cos2θ + sin2θ = 1
det
• Special Orthogonal group in 3D Euclidean space • Special: • Orthogonal:
SO(3)
det(R) = 1 RRT = RTR = ISO(3)
= R ∈!
{
3×3| RR
T= R
TR
= I, det(R) = 1
}
1. R1, R2 ∈SO(3) ⇒ R1R2 ∈SO(3) R1R2(
R1R2)
T = R1R2R2TR1T = R1R1T = Idet R
(
1R2)
= det R( )
1 ⋅det R( )
2 = 1 2. R ∈SO(3) ⇒ RT ∈SO(3)3. R
(
1R2)
R3 = R1(
R2R3)
det(R) = −1: reflection
The Column Vectors
• (the i-th column vector): the i-th rotated axis
r11 r12 r13 r21 r22 r23 r31 r32 r33 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ 1 0 0 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ = r11 r21 r31 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ r11 r12 r13 r21 r22 r23 r31 r32 r33 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ 0 1 0 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ = r12 r22 r32 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ r11 r12 r13 r21 r22 r23 r31 r32 r33 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ = r13 r23 r33 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ R = r11 r12 r13 r21 r22 r23 r31 r32 r33 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ rotated z-axis rotated y-axis rotated x-axis
Coordinate Rotation
• coordinate {A} ↔ coordinate {B}
(
xA, yA, zA)
↔ x(
B, yB, zB)
xA yA zA xB yB zB u v w xA 1 0 0 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ + yA 0 1 0 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ + zA 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ = xB ux uy uz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ + yB vx vy vz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ + zB wx wy wz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⇔ 1 0 0 0 1 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ xA yA zA ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ = ux vx wx uy vy wy uz vz wz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ xB yB zB ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ xA yA zA ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ = ux vx wx uy vy wy uz vz wz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ xB yB zB ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ xB yB zB ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ = ux uy uz vx vy vz wx wy wz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ xA yA zA ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥
Euler’s Rotation Theorem
• Any 3D rotation can be expressed as no more than
three rotations around coordinate axis, which is
equivalent to a single rotation about some axis that runs through the fixed point.
Euler Angles
• The representation of a rotation as three consecutive axis rotations, three angles
Rz(α)= cosα −sinα 0 0 sinα cosα 0 0 0 0 1 0 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ Rx
( )
α ⋅ Ry( )
β ⋅ Rz( )
γ Rx( )
α ⋅ Rz( )
γ ⋅ Ry( )
β Ry( )
β ⋅ Rx( )
α ⋅ Rz( )
γ Ry( )
β ⋅ Rz( )
γ ⋅ Rx( )
α Rz( )
γ ⋅ Rx( )
α ⋅ Ry( )
β Rz( )
γ ⋅ Ry( )
β ⋅ Rx( )
α Rx(β)= 1 0 0 0 0 cosβ −sinβ 0 0 sinβ cosβ 0 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ Ry(γ )= cosγ 0 sinγ 0 0 1 0 0 −sinγ 0 cosγ 0 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥Euler Angles: Interpolation
• A rotation matrix cannot be component-wisely
interpolated! 1 2 0 0 1 0 1 0 −1 0 0 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ + 1 2 0 0 −1 0 1 0 1 0 0 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ = 0 0 0 0 1 0 0 0 0 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ rotation matrix (O) rotation matrix (O) rotation matrix (X)
Euler Angles: Interpolation
• It is can be solved by interpolating angles individually.
• But, the interpolation between two Euler angles is not
Axis Angle (Rotational Axis)
• A rotation can be defined by a unit axis and an angle.
q = p0 + w = p0 + ucosθ + vsinθ
= p0 + p − p
(
0)
cosθ + n × p(
)
sinθ= n⋅p
(
)
n + p − n⋅p(
(
)
n)
cosθ + n × p(
)
sinθ = pcosθ + n⋅p(
)
n 1(
− cosθ)
+ n × p(
)
sinθθ p q o v u θ u w= Ru v r n p0 w p0 w= r cosθ r sinθ ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = r cosθ 0 ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ +⎡ r sin0 θ ⎣ ⎢ ⎤ ⎦ ⎥ = r 0 ⎡ ⎣ ⎢ ⎤ ⎦ ⎥⋅cosθ + 0⎡ r ⎣ ⎢ ⎤ ⎦ ⎥⋅sinθ = ux uy ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥⋅cosθ + vx vy ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥⋅sinθ = u⋅cosθ + v ⋅sinθ
Axis Angle: Interpolation
a = p − o n = a × b a × b b = q − o p q o θ θ = cos−1 a a ⋅ b b ⎛ ⎝⎜ ⎞ ⎠⎟ n rotation axis: rotation angle: rq = pcosθ + n⋅p
(
)
n 1(
− cosθ)
+ n × p(
)
sinθRodriguez’s Formula
q = pcosθ + n⋅p
(
)
n 1(
− cosθ)
+ n × p(
)
sinθN≡ [n] = 0 −nz ny nz 0 −nx −ny nx 0 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⇔ n × p = Np N2= −ny 2− n z 2 nxny nznx nxny −nz2− n x 2 n ynz nznx nynz −nx2− n y 2 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ = nx2−1 nxny nznx nxny ny2−1 n ynz nznx nynz nz2−1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ = nx2 nxny nznx nxny ny2 n ynz nznx nynz nz2 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ − 1 0 0 0 1 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ = nnT− I ∵nx 2+ n y 2+ n z 2 = 1 ( ) n⋅p ( )n= nxpx+ nypy+ nzpz ( )nx nxpx+ nypy+ nzpz ( )ny nxpx+ nypy+ nzpz ( )nz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ = nx2p x+ nxnypy+ nznxpz nxnypx+ ny 2 py+ nynzpz nznxpx+ nynzpy+ nz2pz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ = nx2 n xny nznx nxny ny 2 nynz nznx nynz nz2 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ px py pz ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ = nn( )T p= N( 2+ I)p
∴q = pcosθ + (N2 + I)p 1− cos
(
θ)
+ Np( )
sinθ = Icos⎡⎣ θ + (N2 + I) 1− cos
(
θ)
+ Nsinθ ⎤⎦p = I + Nsin⎡⎣ θ + N2(
1− cosθ)
⎤⎦p= Rp R :rotation matrix
(
)
R = I + Nsinθ + N2(
1− cosθ)
Quaternion
• 4D complex number
• : unit vectors along three perpendicular Cartesian axes in 4D space
q = w + xˆi + yˆj + z ˆk (w, x, y, z) ∈!4
ˆi, ˆj, ˆk
ˆiˆj = ˆk = − ˆjˆi, ˆjˆk = ˆi = − ˆkˆj, ˆkˆi = ˆj = −ˆiˆk ˆi2 = ˆj2 = ˆk2 = −1, ˆiˆjˆk = −1
s = w: real part
v = (x, y,z): imaginary part
Quaternion Operations
• Addition and subtraction
• Multiplication q1q2 = (s1 + v1)(s2 + v2) = w
(
1 + x1ˆi + y1ˆj + z1ˆk)
(
w2 + x2ˆi + y2 ˆj + z2 ˆk)
= w( 1w2 − x1x2 − y1y2 − z1z2)+ w1(
w2 + x2ˆi + y2 ˆj + z2 ˆk)
+ w2(
w1 + x1ˆi + y1ˆj + z1ˆk)
+ y( 1z2 − z1y2)ˆi + z( 1x2 − x1z2) ˆj + x( 1y2 − y1x2) ˆk = s( 1s2 − v1⋅v2)+ s( 1v2 + s2v1 + v1 × v2) q1 ± q2 = (s1 + v1)± (s2 + v2) = w( 1 ± w2)+ x( 1 ± x2)ˆi + y( 1 ± y2) ˆj + z( 1 ± z2) ˆk = (s1 ± s2)+ (v1 + v2) q1q2 ≠ q2q1 ( )Quaternion Operations
• Conjugate • Norm (magnitude) • Inverse q = s − v = w − xˆi − yˆj − z ˆk q = qq = s2 + v ⋅v = w2 + x2 + y2 + z2 q−1 = q q ∵ qq −1 = qq q = 1 ⎛ ⎝⎜ ⎞ ⎠⎟Unit Quaternion for Rotation
• Unit quaternion represents 3D rotation.
q = cos(θ / 2)+ usin(θ / 2) u = u1ˆi + u2ˆj + u3 ˆk u = u( 1,u2,u3) u = 1
q 2 = cos2(θ / 2)+ usin(θ / 2)⋅usin(θ / 2) = cos2(θ / 2)+ sin2(θ / 2) u 2 = 1
rotation angle: θ unit rotation axis: u
The same result as the rotation angle expression proof
Example
qpq−1 = cosθ 2 + 0ˆi + 0 ˆj + sin θ 2 ˆk ⎛⎝⎜ ⎞⎠⎟(0+ xˆi + yˆj + z ˆk) cosθ2 − 0ˆi − 0 ˆj − sin
θ 2 ˆk ⎛ ⎝⎜ ⎞⎠⎟ = cosθ 2 + 0ˆi + 0 ˆj + sin θ 2 ˆk ⎛ ⎝⎜ ⎞⎠⎟ z sinθ2 + (x cos θ 2 − ysin θ 2)ˆi+ (xsin θ 2 + ycos θ 2) ˆj+ zcos θ 2 ˆk ⎛ ⎝⎜ ⎞⎠⎟ = 0 + x(cos2θ 2 − ysin 2θ 2)− 2ycos θ 2sin θ 2 ⎛
⎝⎜ ⎞⎠⎟ˆi + 2xcosθ2sin
θ 2 + y(cos 2θ 2 − ysin 2θ 2) ⎛ ⎝⎜ ⎞⎠⎟ ˆj + z cos2θ2 + sin 2θ 2 ⎛ ⎝⎜ ⎞⎠⎟ ˆk = 0 + x cos( θ− ysinθ)ˆi + xsin( θ+ ycosθ)ˆj + zˆk
= 0, x cos( θ − ysinθ, x sinθ + ycosθ, z)
cosθ −sinθ 0 0 sinθ cosθ 0 0 0 0 1 0 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ x y z 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ = x cosθ − ysinθ x sinθ + ycosθ 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥
•
Concatenating Quaternions
q2
(
q1pq1−1)
q−12 = q(
2q1)
p q(
1−1q2−1)
= q(
2q1)
p q(
2q1)
−1The rotation using q1 and then using q2 = the rotation using q2q1
SLERP
(Spherical Linear Interpolation)
• A unit quaternion is a point on a 4D unit sphere.
• Therefore, every point on a 4D unit sphere
represents a 3D rotation.
• Interpolating orientations means moving on a 4D unit
SLERP
(Spherical Linear Interpolation)
SLERP(qa, qb, t) = sin ((1 − t)θ)
sinθ qa + sin (tθ)sinθ qb
cosθ = qa ⋅ qb
t ∈ [0,1] {qqab; , t = 0; , t = 1
LERP(qa, qb, t) = (1 − t)qa + tqb
θ = cos−1 (q
SLERP
(Spherical Linear Interpolation)
θ 1 − tθ tθ a b q x y q = cos(tθ)x + sin(tθ)yy = Normalize (b − (b ⋅ x)x) = Normalize (b − (b ⋅ a)a) = Normalize (b − cosθa) = b − cosθa
b − cosθa =
b − cosθa
(b − cosθa) ⋅ (b − cosθa)
= b − cosθa
b ⋅ b − 2(a ⋅ b)cosθ + (a ⋅ a)cos2θ
= b − cosθa
1 − 2cos2θ + cos2θ = b − cosθa1 − cos2θ = b − cosθasinθ
= cos(tθ)a + sin(tθ) b − cosθasinθ = (cos(tθ) − sin(tθ)cosθsinθ ) a + sin(tθ)sinθ b = sinθcos(tθ) − cosθsin(tθ)sinθ a + sin(tθ)sinθ b = sin(θ − tθ)sinθ a + sin(tθ)sinθ b
= sin ((1 − t)θ)
sinθ a + sin(tθ)sinθ b
∵ sin (α + β) = sinα cosβ + cosα sinβ
SLERP
(Spherical Linear Interpolation)
SLERP(qa, qb, t) = sin ((1 − t)θ)sinθ qa + sin (tθ)sinθ qb
= qa(qa−1qb)t = qb(qb−1qa)1−t = (qbqa−1)tqa = (qaqb−1)1−tqb