Game Development Reference
In-Depth Information
Now that we have constraint definitions, we need Jacobians. But to get that
right, I need to tell you a bit more about how I manipulate quaternion expressions.
9.5 Matrix-Based Quaternion Algebra
The quaternion algebra is covered in Chapter 1, so this section is just a simple
translation into language I find useful. The format I use here should help you
implement what is described in this chapter.
First, note that any quaternion q , p
can be represented as a simple four-
dimensional vector. That works for addition and subtraction, obviously. The only
thing needed to make the correspondence complete is to define the quaternion
product in terms of matrix-vector operations, as I do now. Since the quaternion
product of q , p
H
H
is linear in both q , p
R
4 , we can write it as the matrix-
vector product
qp =
Q
( q ) p =
P
( p ) q ,
corresponding to the right and left products, respectively, with the definitions
q s
q 1
q 2
q 3
= q s
= q
T ( q ) ,
q v
q 1
q s
q 3
q 2
G
Q
( q )=
q 2
q 3
q s
q 1
q s I 3 +[ q v ] ×
q v
q 3
q 2
q 1
q s
q s
−q 1
−q 2
−q 3
= q s
= q
T ( q ) ,
q v
q 1
q s
q 3
q 2
P ( q )=
E
q 2
q 3
q s
q 1
q v
q s I 3
[ q v ] ×
q 3
q 2
q 1
q s
where
( q )=
[ q v ] × ,
( q )=
q s I 3 +[ q v ] × ,
G
q v
q s I 3
E
q v
0
x 3
x 2
.
[ x ] × =
x 3
0
x 1
x 2
x 1
0
For the last definition, this means that [ x ] × y = x
×
y . For completeness, the
complex conjugation matrix is
10 0 0
0
= 10
0
, so q =
10 0
00
C
=
C
q .
10
00 0
I
1