quaternions. , Gimbal lock.
, , ( ). , , .
:
,
(a,b,c)
, ,
.
,
.
-
, ,
, ( )
. "",
:
M M' = I
'. ,
.
, .
, ai + bj + ck,
.
, -
( ?)
.
,
( )
" ". ,
, ,
( "",
) .
1,
-1. , ( )
, ,
( 1
).
,
(
!). ,
:
u = ai + bj + ck
"" ,
k ( z). , z;
2x2 x, y
:
cos(r) sin(r) 0
M = -sin(r) cos(r) 0
0 0 1
, "" , u k,
, (
), . ,
R , u k, R ' k u,
:
R' M R
,
u, u :
R' M R u = R' M k = R' k = u
, u.
,
Q Q '
"" u. ,
, , , .
, . , ,
. , ,
.
"" 1843 :
[ ]
http://www-gap.dcs.st-and.ac.uk/~history/Mathematicians/Hamilton.html
3D- .
q = q0 + q1*i + q2*j + q3*k :
(q0² + q1² - q2² - q3²) 2(q1q2 - q0q3) 2(q1q3 + q0q2)
Q = 2(q2q1 + q0q3) (q0² - q1² + q2² - q3²) 2(q2q3 - q0q1)
2(q3q1 - q0q2) 2(q3q2 + q0q1) (q0² - q1² - q2² + q3²)
, Q - , .. Q Q' = I,
, Q . ,
, 1:
(q0² + q1² - q2² - q3²)² + 4(q1q2 - q0q3)² + 4(q1q3 + q0q2)²
= (q0² + q1² - q2² - q3²)² + 4(q1q2)² + 4(q0q3)² + 4(q1q3)² + 4(q0q2)²
= (q0² + q1² + q2² + q3²)²
= 1
:
[ (q0² + q1² - q2² - q3²), 2(q1q2 - q0q3), 2(q1q3 + q0q2) ]
* [ 2(q2q1 + q0q3), (q0² - q1² + q2² - q3²), 2(q2q3 - q0q1) ]
= 2(q0² + q1² - q2² - q3²)(q2q1 + q0q3)
+ 2(q1q2 - q0q3)(q0² - q1² + q2² - q3²)
+ 4(q1q3 + q0q2)(q2q3 - q0q1)
= 4(q0²q1q2 + q1²q0q3 - q2²q0q3 - q3²q2q1)
+ 4(q3²q1q2 - q1²q0q3 + q2²q0q3 - q0²q2q1)
= 0
, det(Q) = 1, , , Q
.
Q ? ? ,
r :
u = ai + bj + ck
, :
q = cos(r/2) + sin(r/2) * u
= cos(r/2) + sin(r/2) ai + sin(r/2) bj + sin(r/2) ck
,
q0 = cos(r/2), q1 = sin(r/2) a, q2 = sin(r/2) b, q3 = sin(r/2) c,
, Q "" u:
Q u = u
, , .
u = 0i + 0.6j + 0.8k - , r = pi - .
:
q = cos(pi/2) + sin(pi/2) * u
= 0 + 0i + 0.6j + 0.8k
:
-1 0 0
Q = 0 -0.28 0.96
0 0.96 0.28
, Q Q '= det (Q) = 1.
, :
Q u = [ 0, -0.28*0.6 + 0.96*0.8, 0.96*0.6 + 0.28*0.8 ]'
= [ 0, 0.6, 0.8 ]'
= u
. u , "" Q.
, , pi ( 180
), , Q
, :
i + 0j + 0k, or as a vector, [ 1, 0, 0 ]'
Q [ 1, 0, 0 ]' = [-1, 0, 0 ]', [1, 0, 0
] ' pi u.
( ,
), . :
[ ]
http://gandalf-library.sourceforge.net/tutorial/report/node125.html
r u = ai + bj + ck [a, b, c] ', :
q0 = cos(r/2), q1 = sin(r/2) a, q2 = sin(r/2) b, q3 = sin(r/2) c
:
(q0² + q1² - q2² - q3²) 2(q1q2 - q0q3) 2(q1q3 + q0q2)
Q = 2(q2q1 + q0q3) (q0² - q1² + q2² - q3²) 2(q2q3 - q0q1)
2(q3q1 - q0q2) 2(q3q2 + q0q1) (q0² - q1² - q2² + q3²)
Q , :
Q u = u