Prerequisites
You may want to review vectors:
Representing 2D transforms
To represent isometry transforms in 2D we only need one scalar value to represent rotation and we need 2 scalar values (a 2D vector) to represent translation. A multivector based on 2D vectors therefore has enough values to represent a 2D isometries , for instance e12 might hold the rotation value and (e1,e2) hold the translation value, but does the algebra work out? Can we do useful operations on the multivector using such a notation? I have tried below but, as you can see, I cant find a way to do it. Also, on this page, I have tried to find a transformation based on 2D that is reversable - again, it does not work out.
We want to find which multivectors are reversible, that is we need to always find the inverse, so:
if ,
multivector a translates b into c
then we need to be able to find the inverse a-1 which translates c into b
one condition which meets this requirement is:
a a†=scalar
as explained here.
So using the multiplication table here and multiplying out the terms of a a† gives:
result:
e = scalar = |
e * e |
+ e1 * e1 |
+ e2 * e2 |
+ e12 * e12 |
e1 = 0 = |
e1 * e |
+ e * e1 |
- e12 * e2 |
- e2 * e12 |
e2 = 0 = |
e2 * e |
+ e12 * e1 |
+ e * e2 |
+ e1 * e12 |
e12 = 0 = |
e12 * e |
+ e2 * e1 |
- e1 * e2 |
- e * e12 |
scalar = e2 + e12 + e22 + e122
0 = 2*e*e1 - 2*e2*e12
0 = 2*e*e2 + 2*e1*e12
0 = 0
rearrange equation 2 to give
e12 = e*e1/e2
substitute in equation 3:
e*e2 =-e1*e12
e*e2 =-e1*e*e1/e2
e2*e2 =-e1*e1
e1 = √(-e22)
e1 = i e2
so perhaps these equations don't have a scalar solution? or have I made an error?
Applying a multivector to a point
To calculate the rotated point from the original position of the point.
Pout=a * Pin * a -1
- Pin = original position of point
- Pout = resulting position of point after transform
- a= multivector
- a -1 = inverse of a
|
In some sources I have seen this transform shown as:
A(b) =Ab(A#)-1
where:
a# = Main involution sumi(-1)ia<i>
Such transformations satisfy A(b) |A(c) = b |c and are
known as Lorentz transforms, or as isometries of inner product- |
If A is even then A(b) = AbA-1 and we have A(bc)) = A(b)A(c) .
If A is a k-versor then A# = (-1)kA so that A(bc) = (-1)kA(b)A(c).
|
since we cant always invert a we will use a† instead of a -1 which gives:
Pout=a * Pin * a†
expanding out the terms gives:
out.e=a.e*(in.e*a.e+in.e1*a.e1+in.e2*a.e2+in.e12*a.e12)+a.e1*(in.e*a.e1+in.e1*a.e+in.e2*a.e12+in.e12*a.e2)+a.e2*(in.e*a.e2-in.e1*a.e12+in.e2*a.e-in.e12*a.e1)-a.e12*(-in.e*a.e12+in.e1*a.e2-in.e2*a.e1+in.e12*a.e)
out.e1=a.e*(in.e*a.e1+in.e1*a.e+in.e2*a.e12+in.e12*a.e2)+a.e1*(in.e*a.e+in.e1*a.e1+in.e2*a.e2+in.e12*a.e12)-a.e2*(-in.e*a.e12+in.e1*a.e2-in.e2*a.e1+in.e12*a.e)+a.e12*(in.e*a.e2-in.e1*a.e12+in.e2*a.e-in.e12*a.e1)
out.e2=a.e*(in.e*a.e2-in.e1*a.e12+in.e2*a.e-in.e12*a.e1)+a.e1*(-in.e*a.e12+in.e1*a.e2-in.e2*a.e1+in.e12*a.e)+a.e2*(in.e*a.e+in.e1*a.e1+in.e2*a.e2+in.e12*a.e12)-a.e12*(in.e*a.e1+in.e1*a.e+in.e2*a.e12+in.e12*a.e2)
out.e12=a.e*(-in.e*a.e12+in.e1*a.e2-in.e2*a.e1+in.e12*a.e)+a.e1*(in.e*a.e2-in.e1*a.e12+in.e2*a.e-in.e12*a.e1)-a.e2*(in.e*a.e1+in.e1*a.e+in.e2*a.e12+in.e12*a.e2)+a.e12*(in.e*a.e+in.e1*a.e1+in.e2*a.e2+in.e12*a.e12)
simplifying the terms and combineing the 'in' terms gives:
out.e= ( a.e*a.e +a.e1*a.e1 +a.e2*a.e2 +a.e12*a.e12)*in.e +( 2*a.e*a.e1 -2*a.e2*a.e12)*in.e1 +( 2*a.e*a.e2 +2*a.e1*a.e12)*in.e2
out.e1= ( 2*a.e*a.e1 +2*a.e2*a.e12)*in.e +( a.e*a.e +a.e1*a.e1 -a.e2*a.e2 -a.e12*a.e12)*in.e1 +( 2*a.e*a.e12 +2*a.e1*a.e2)*in.e2
out.e2= ( 2*a.e*a.e2 -2*a.e1*a.e12)*in.e +( -2*a.e*a.e12 +2*a.e1*a.e2)*in.e1 +( a.e*a.e -a.e1*a.e1 +a.e2*a.e2 -a.e12*a.e12)*in.e2
out.e12= ( a.e*a.e -a.e1*a.e1 -a.e2*a.e2 +a.e12*a.e12)*in.e12
We want to represent a transform of a vector, in other words we want to transform (in.e1,in.e2) into (out.e1,out.e2)
So if we let in.e=0 and in.e12=0 we get:
out.e= ( 2*a.e*a.e1 -2*a.e2*a.e12)*in.e1 +( 2*a.e*a.e2 +2*a.e1*a.e12)*in.e2
out.e1= ( a.e*a.e +a.e1*a.e1 -a.e2*a.e2 -a.e12*a.e12)*in.e1 +( 2*a.e*a.e12 +2*a.e1*a.e2)*in.e2
out.e2= ( -2*a.e*a.e12 +2*a.e1*a.e2)*in.e1+( a.e*a.e -a.e1*a.e1 +a.e2*a.e2 -a.e12*a.e12)*in.e2
In order to represent a rotation in 2D we would need to get the equations into this form:
R= |
cos theta |
-sin theta |
sin theta |
cos theta |
|
so top left = bottom right,
a.e*a.e +a.e1*a.e1 -a.e2*a.e2 -a.e12*a.e12 = a.e*a.e -a.e1*a.e1 +a.e2*a.e2 -a.e12*a.e12
a.e1*a.e1 -a.e2*a.e2 = -a.e1*a.e1 +a.e2*a.e2
a.e1*a.e1 = a.e2*a.e2
a.e1 = a.e2 or -a.e2
also top right = -bottom left,
2*a.e*a.e12 +2*a.e1*a.e2 = -( -2*a.e*a.e12 +2*a.e1*a.e2)
a.e*a.e12 +a.e1*a.e2 = a.e*a.e12 - a.e1*a.e2
a.e1*a.e2 = - a.e1*a.e2
a.e1*a.e2 = 0
So this does not seem to work, as this is only true when a.e1 = a.e2 = 0
This site may have errors. Don't use for critical systems.