\documentclass{article}
\usepackage{axiom}
\begin{document}
\title{Quaternions and Rotation Sequences}
\author{Timothy Daly}
\maketitle
\begin{abstract}
\end{abstract}
\eject
\tableofcontents
\eject
\section{Rotations in 3-space}
Orthogonal groups are used in Quantum Field Theory. Conway highlights
4 kinds of orthogonal groups. First is the General Orthogonal group
$GO_n$ which is the set of all isometries of n-dimensional Euclidean
space $R^n$ that fix the origin. This would imply rotations and
reflections but not translations.
The determinant of any element in $GO_n$ is $+1$ or $-1$. Reflections
have a determinant of $-1$. The elements of determinant $+1$
(rotations) form a subgroup of index 2, the Special Orthogonal group
$SO_n$. The product of any two reflections forms a rotation so
grouping reflections in pairs generates $SO_n$.
Conway also defines two groups derived from $GO_n$ and $SO_n$. From
$GO_n$ we get the Projective General Orthogonal group. From $SO_n$ we
get the Projective Special Orthogonal group. Annoyingly, he's
introduced these groups without explaining them. And based their
definition on an undefined $\alpha$.
It is a consequence of the existence of complex numbers that $SO_2$
and $PSO_2$ are commutative; of the existence of quaternions that
$PSO_4$ is equivalent to $PSO_3 \times PSO_3$; and of the existence of
octonions that >=
R1:=matrix([[cos a, sin a, 0],[-sin a, cos a, 0],[0, 0, 1]])
@
\begin{verbatim}
+ cos(a) sin(a) 0+
| |
(1) |- sin(a) cos(a) 0|
| |
+ 0 0 1+
Type: Matrix Expression Integer
\end{verbatim}
Next we define a rotation around the Y axis by a rotation angle of $b$.
<>=
R2:=matrix([[cos b, 0, -sin b],[0, 1, 0],[sin b, 0, cos b]])
@
\begin{verbatim}
+cos(b) 0 - sin(b)+
| |
(2) | 0 1 0 |
| |
+sin(b) 0 cos(b) +
Type: Matrix Expression Integer
\end{verbatim}
Then we compose them (order is important) to form the single rotation
equivalent to first rotating around $X$, then around the new,
displaced $Y$.
<>=
R:=R2*R1
@
\begin{verbatim}
+cos(a)cos(b) cos(b)sin(a) - sin(b)+
| |
(3) | - sin(a) cos(a) 0 |
| |
+cos(a)sin(b) sin(a)sin(b) cos(b) +
Type: Matrix Expression Integer
\end{verbatim}
To find the axis of this single rotation we define the vector $V$
<>=
V:=matrix([[x1],[y1],[z1]])
@
\begin{verbatim}
+x1+
| |
(4) |y1|
| |
+z1+
Type: Matrix Polynomial Integer
\end{verbatim}
And this is the equation we need to solve. Since we rotate around the
vector $V$ it is unchanged when operated on by the rotation $R$, or in
equation form we get
<>=
E:=R*V=V
@
\begin{verbatim}
+- z1 sin(b) + y1 cos(b)sin(a) + x1 cos(a)cos(b)+ +x1+
| | | |
(5) | - x1 sin(a) + y1 cos(a) |= |y1|
| | | |
+ (y1 sin(a) + x1 cos(a))sin(b) + z1 cos(b) + +z1+
Type: Equation Matrix Expression Integer
\end{verbatim}
We can subtract the right hand side from the left hand side thus
<>=
F:=lhs(E)-rhs(E)
@
\begin{verbatim}
+- z1 sin(b) + y1 cos(b)sin(a) + x1 cos(a)cos(b) - x1+
| |
(6) | - x1 sin(a) + y1 cos(a) - y1 |
| |
+ (y1 sin(a) + x1 cos(a))sin(b) + z1 cos(b) - z1 +
Type: Matrix Expression Integer
\end{verbatim}
and form the equation setting the result to zero. This has two solutions.
The trivial solution is when $V$ is zero.
We solve for the nontrivial solution.
<>=
G:=F=matrix([[0],[0],[0]])
@
\begin{verbatim}
+- z1 sin(b) + y1 cos(b)sin(a) + x1 cos(a)cos(b) - x1+ +0+
| | | |
(7) | - x1 sin(a) + y1 cos(a) - y1 |= |0|
| | | |
+ (y1 sin(a) + x1 cos(a))sin(b) + z1 cos(b) - z1 + +0+
Type: Equation Matrix Expression Integer
\end{verbatim}
If we pick out the second equation
<>=
H:=elt(F,2,1)
@
\begin{verbatim}
(8) - x1 sin(a) + y1 cos(a) - y1
Type: Expression Integer
\end{verbatim}
and let x1 = k
<>=
x1:=k
@
\begin{verbatim}
(9) k
Type: Variable k
\end{verbatim}
and substitute this into the second equation
<>=
J:=subst(H,'x1=k)
@
\begin{verbatim}
(10) - k sin(a) + y1 cos(a) - y1
Type: Expression Integer
\end{verbatim}
we can solve this equation for y1.
<>=
L:=solve(J,y1)
@
\begin{verbatim}
k sin(a)
(11) [y1= ----------]
cos(a) - 1
Type: List Equation Expression Integer
\end{verbatim}
and we can assign the solution to the variable y1
<>=
y1:=rhs(first(solve(J,y1)))
@
\begin{verbatim}
k sin(a)
(12) ----------
cos(a) - 1
Type: Expression Integer
\end{verbatim}
Now we turn our attention to the third equation
<>=
H1:=elt(F,3,1)
@
\begin{verbatim}
(13) (y1 sin(a) + x1 cos(a))sin(b) + z1 cos(b) - z1
Type: Expression Integer
\end{verbatim}
and substitute the known values for x1 and y1
<>=
J1:=subst(H1,['x1=x1, 'y1=y1])
@
\begin{verbatim}
(14)
2 2
(k sin(a) + k cos(a) - k cos(a))sin(b) + (z1 cos(a) - z1)cos(b)
+
- z1 cos(a) + z1
/
cos(a) - 1
Type: Expression Integer
\end{verbatim}
and then solve for z1, assigning it to the variable z1
<>=
z1:=simplify(rhs(first(solve(J1,z1))))
@
\begin{verbatim}
k sin(b)
(15) ----------
cos(b) - 1
Type: Expression Integer
\end{verbatim}
So the axis of rotation is
<>=
[x1,y1,z1]
@
\begin{verbatim}
k sin(a) k sin(b)
(16) [k,----------,----------]
cos(a) - 1 cos(b) - 1
Type: List Expression Integer
\end{verbatim}
We can choose a specific value of $k = -1$ so that $y1$ becomes
<>=
y1:=eval(y1,[k=-1])
@
\begin{verbatim}
sin(a)
(17) - ----------
cos(a) - 1
Type: Expression Integer
\end{verbatim}
and $z1$ becomes
<>=
z1:=eval(z1,[k=-1])
@
\begin{verbatim}
sin(b)
(18) - ----------
cos(b) - 1
Type: Expression Integer
\end{verbatim}
So the axis of rotation is
<>=
[x1,y1,z1]
@
\begin{verbatim}
sin(a) sin(b)
(19) [k,- ----------,- ----------]
cos(a) - 1 cos(b) - 1
Type: List Expression Integer
\end{verbatim}
We need the trace of the matrix which is only defined for square matrices.
So we create a new version of the R matrix as a square matrix $RSQ$
<>=
RSQ:SQMATRIX(3,EXPR(INT)):=R
@
\begin{verbatim}
+cos(a)cos(b) cos(b)sin(a) - sin(b)+
| |
(20) | - sin(a) cos(a) 0 |
| |
+cos(a)sin(b) sin(a)sin(b) cos(b) +
Type: SquareMatrix(3,Expression Integer)
\end{verbatim}
Now we compute the trace
<>=
TR:=trace(RSQ)
@
\begin{verbatim}
(21) (cos(a) + 1)cos(b) + cos(a)
Type: Expression Integer
\end{verbatim}
and we can obtain the angle of rotation by equating the trace to 1-2*cos(c)
<>=
TREQ:=TR=1+2*cos(c)
@
\begin{verbatim}
(22) (cos(a) + 1)cos(b) + cos(a)= 2cos(c) + 1
Type: Equation Expression Integer
\end{verbatim}
which we can solve for c
<>=
c:=rhs(first(solve(TREQ,c)))
@
\begin{verbatim}
(cos(a) + 1)cos(b) + cos(a) - 1
(23) acos(-------------------------------)
2
Type: Expression Integer
\end{verbatim}
assuming $k=-1$, heading $a=\pi/6$, and elevation $b=\pi/3$ we can
compute numeric values for the axis of rotation thus. First a numeric
$x1$
<>=
x1v:=eval(x1,k=-1)
@
\begin{verbatim}
(24) - 1
Type: Polynomial Integer
\end{verbatim}
then a numeric y1
<>=
y1v:=numeric(eval(y1,[a=%pi/6]))
@
\begin{verbatim}
(25) 3.7320508075 688772936
Type: Float
\end{verbatim}
then a numeric z1
<>=
z1v:=numeric(eval(z1,[k=-1,b=%pi/3]))
@
\begin{verbatim}
(26) 1.7320508075 688772935
Type: Float
\end{verbatim}
giving us the vector for the axis of rotation
<>=
[x1v, y1v, z1v]
@
\begin{verbatim}
(27) [- 1.0,3.7320508075 688772936,1.7320508075 688772935]
Type: List Polynomial Float
\end{verbatim}
with a rotation angle (in radians) given by
<>=
c1v:=numeric(eval(c,[a=%pi/6,b=%pi/3]))
@
\begin{verbatim}
(28) 1.1598041770 494147762
Type: Float
\end{verbatim}
in degrees this is
<>=
c1v*180/%pi
@
\begin{verbatim}
(29) 66.4518844065 75160021
Type: Float
\end{verbatim}
We can evaluate the combined rotation matrix under our assumed values
<>=
rv:=eval(R,[a=%pi/6,b=%pi/3])
@
\begin{verbatim}
+ +-+ +-++
|\|3 1 \|3 |
|---- - - ----|
| 4 4 2 |
| |
| +-+ |
(30) | 1 \|3 |
|- - ---- 0 |
| 2 2 |
| |
| +-+ |
| 3 \|3 1 |
| - ---- - |
+ 4 4 2 +
Type: Matrix Expression Integer
\end{verbatim}
<<*>>=
<>
@
\eject
\begin{thebibliography}{99}
\bibitem{1} nothing
\end{thebibliography}
\end{document}