https://www.physi.uni-heidelberg.de/~vhollmeier/ga4p/materials/ga_lecture_notes.pdf - Hollmeier, Leidel, Sapir Lecture Notes
https://arxiv.org/pdf/2404.19682 Pablo Banon Perez and Maarten DeKieviet - General Relativity: New insights from a Geometric Algebra approach
ฮณโ is time and squares to -1
ฮณโ is space x, squares to 1
ฮณโ is space y, squares to 1
ฮณโ is space z, squares to 1
So that's Cl(3,1). THE ONLY TRUE DEFINITION. jk, some seem to do Cl(1,3) but ill stay with what is taught.
Now the planes are
ฮณโโ all space thus ยฒ = -1
ฮณโโ all space thus ยฒ = -1
ฮณโโ all space thus ยฒ = -1
ฮณโโ time and space ยฒ = +1
ฮณโโ time and space ยฒ = +1
ฮณโโ time and space ยฒ = +1
unsure why?
Lets see ฮณโโยฒ = ฮณโโโโ = -ฮณโโโโ so -1(ฮณโยฒ = +1 ฮณโยฒ = +1) + -1 * +1 * +1 = -1
Lets see ฮณโโยฒ = ฮณโโโโ = -ฮณโโโโ so -1(ฮณโยฒ = -1 ฮณโยฒ = +1) + -1 * -1 * +1 = +1
No shame, i was certain it's still -1 once .... but it's 1.
When we form trivectors here we will NOT get 4 positive, 4 negative ones like in 4,0 4D.
there are 4 3 2 * 1 = 24 possible permutations of 4 bases. BUT we only want 3 of them. So thats 4! / 3! = 4 basis trivectors.
Because all have positive and negative possible values thats 8 "cubes". But lets stay with the 4 basis trivectors.
Now ask to define them: What axis is left out? And there it makes sense to go 0,1,2,3 is left out
Then we check what happens when we wedge this trivector with the missing axis. We know (you can check below at Quadvector) that Iยฒ = -1 in STA.
ฮณโ: ฮณโโโ โง ฮณโ = ฮณโโโโ (2 swaps) = +ฮณโโโโ = +I (+Iยฒ = -1)
ฮณโ: ฮณโโโ โง ฮณโ = ฮณโโโโ (2 swaps) = +ฮณโโโโ = +I (+Iยฒ = -1) <-- damn!
ฮณโ: ฮณโโโ โง ฮณโ = ฮณโโโโ (0 swaps) = +ฮณโโโโ = +I (+Iยฒ = -1)
ฮณโ: ฮณโโโ โง ฮณโ = ฮณโโโโ (3 swaps) = -ฮณโโโโ = -I (-Iยฒ = +1)
@TBH I THINK this has to do with all 8 cubes needing to be summed to a negative volume. To be checked!!
in normal 4D we had Iยฒ = 1.
eโโโโยฒ = eโโโโโโโโ = -eโโโโโโโโ = eโโโโโโโโ = -eโโโโโโ = eโโโโโโ = -eโโโโ = 1
NOT THE CASE IN STA!!!
ฮณโโโโ is I and Iยฒ = -1!
Iยฒ = ฮณโโโโยฒ = ฮณโโโโโโโโ = -ฮณโโโโโโโโ = ฮณโโโโโโโโ = -ฮณโโโโโโโโ = ฮณโโโโโโโโ = -ฮณโโโโโโโโ = ฮณโโโโโโโโ = 1(-1 1 1 1) = -1
Because we build from 2D, 3D to 4D and now STA it makes sense to stay with eโ to eโ and vectors vโ to vโ adding 4 as the ฮณ0 time.
This is mostly done to switch at will to STA from 4D meshes and both are simple to convert to time as index 0 when needed.
eโ = ฮณโ
eโ = ฮณโ
eโ = ฮณโ
eโ = ฮณโ
Easy parts
s = R[0]
p = R[7]
Bivector parts
Bโโ = R[1]
Bโโ = R[2]
Bโโ = R[3]
Bโโ = R[4]
Bโโ = R[5]
Bโโ = R[6]
Squares makes it easier and faster
s_2 = sยฒ
yz_2 = Bโโยฒ
zx_2 = Bโโยฒ
xy_2 = Bโโยฒ
xw_2 = Bโโยฒ
yw_2 = Bโโยฒ
zw_2 = Bโโยฒ
p_2 = Iยฒ
Formula in 4D with |B|ยฒ wont work in STA as (sยฒ - Iยฒ)v - vBยฒ does not square all planes to -1
(Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ)ยฒ
=
-Bโโยฒ - Bโโ Bโโ eโโ + Bโโ Bโโ eโโ + Bโโ Bโโ eโโโโ - Bโโ Bโโ eโโ + Bโโ Bโโ eโโ
...
Before you do all 6 lines note there will always be the plane squared part in the diagonals which we already know will be -1 for all space-space and 1 for all space-time planes
-Bโโยฒ -Bโโยฒ -Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ
then you know for all terms that are mixed planes that share an axis you will get f.e line 1
Bโโeโโ * Bโโeโโ = - Bโโ Bโโ eโโ
and in line 2
Bโโeโโ * Bโโeโโ = Bโโ Bโโ eโโ eโโ = Bโโ Bโโ -eโโ -eโโ = Bโโ Bโโ eโโ
so these all cancel out. We never square planes or axes in these terms thus that's true in 4D and STA
That's 4 terms per line, so already 24 terms gone!
What about the terms that share no axes?
Bโโ eโโ * Bโโ eโโ = Bโโ Bโโ eโโโโ (2 swaps) eโโโโ
Bโโ eโโ * Bโโ eโโ = Bโโ eโโ eโโโโ (2 swaps) eโโโโ
Bโโ eโโ * Bโโ eโโ = Bโโ eโโ eโโโโ (0 swaps)
Bโโ eโโ * Bโโ eโโ = Bโโ Bโโ eโโโโ (2 swaps) eโโโโ
Bโโ eโโ * Bโโ eโโ = Bโโ Bโโ eโโโโ (4 swaps) = -eโโโโ = eโโโโ = -eโโโโ = eโโโโ
Bโโ eโโ * Bโโ eโโ = Bโโ Bโโ eโโโโ (4 swaps) = -eโโโโ = eโโโโ = -eโโโโ = eโโโโ
so they are all quadvectors.
leaves
Bยฒ = -Bโโยฒ -Bโโยฒ -Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ + 2(Bโโ Bโโ + Bโโ Bโโ + Bโโ Bโโ)I
v ยท B will be grade 1
grade 1 โง with B will give grade 1 and some grade 3 when eโ eโโ
so thats the same as in 4D and this means we can just combine again ...
Some things i stumbled again on
-BvB == 2(v ยท B)B - vBยฒ
this means you need to "downgrade" now, THEN move a term maybe.
So 2(v ยท B) ยท B - vโจBยฒโฉโ first, THEN you move the now grade 0 / scalar โจBยฒโฉโ
Iยฒ in STA to know how to treat the pseudoscalar component (i call it p) notice how Iยฒ differs in 4D and STA:
4D Iยฒ: eโโโโยฒ
1 2 3 4 5 6
= eโโโโโโโโ = -eโโโโโโโโ = eโโโโโโโโ = -eโโโโโโ = eโโโโโโ = -eโโโโ = 1
STA Iยฒ: eโโโโยฒ (ฮณโโโโ) where eโ or ฮณโ squares to -1
= eโโโโโโโโ = -eโโโโโโโโ = eโโโโโโโโ = -eโโโโโโ = eโโโโโโ = -eโโโโ = eโโ and that is -1!!!
(or see above at Quadvector)
so it will be
(sยฒ + pยฒ - โจBยฒโฉโ)v + 2s(v ยท B) + 2I(v โง B) + โจ2(v ยท B)Bโฉโ
or
(sยฒ + pยฒ - โจBยฒโฉโ)v + 2s(v ยท B) + 2I(v โง B) + 2(v ยท B) ยท B
These calculations will be different to 4D so lets do them now as we need these a lot later
(vโeโ + vโeโ + vโeโ + vโeโ) ยท (Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ)
= vโ( -Bโโeโ +Bโโeโ +Bโโeโ ) +
vโ( +Bโโeโ -Bโโeโ +Bโโeโ ) +
vโ( -Bโโeโ +Bโโeโ +Bโโeโ ) +
// now ... beware!!!
vโ( +Bโโeโ +Bโโeโ +Bโโeโ )
I did this in 4D to check the trivectors so you can look it up there to verify.
For vโ (-Bโโeโ +Bโโeโ +Bโโeโ) ยท (Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ)
= vโ ( +BโโBโโeโ -Bโโยฒeโ 0 0 0 -BโโBโโeโ +
+BโโBโโeโ 0 -Bโโยฒeโ 0 +BโโBโโeโ 0 +
// DANGER ZONE
0 0 0 +Bโโยฒeโ +BโโBโโeโ +BโโBโโeโ )
For vโ (+Bโโeโ -Bโโeโ +Bโโeโ) ยท (Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ)
= vโ ( -Bโโยฒeโ +BโโBโโeโ 0 0 0 +BโโBโโeโ +
0 +BโโBโโeโ -Bโโยฒeโ -BโโBโโeโ 0 0 +
0 0 0 +BโโBโโeโ +Bโโยฒeโ +BโโBโโeโ )
For vโ (-Bโโeโ +Bโโeโ +Bโโeโ) ยท (Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ)
= vโ ( -Bโโยฒeโ 0 +BโโBโโeโ 0 -BโโBโโeโ 0 +
0 -Bโโยฒeโ +BโโBโโeโ +BโโBโโeโ 0 0 +
0 0 0 +BโโBโโeโ +BโโBโโeโ +Bโโยฒeโ )
For vโ (+Bโโeโ +Bโโeโ +Bโโeโ) ยท (Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ)
= vโ ( 0 -BโโBโโeโ +BโโBโโeโ +Bโโยฒeโ 0 0 +
+BโโBโโeโ 0 -BโโBโโeโ 0 +Bโโยฒeโ 0 +
-BโโBโโeโ +BโโBโโeโ 0 0 0 +Bโโยฒeโ )
0 mistakes on initial try but thats easy if you can look up 4D
note do I first or you need to deal with trivectors see 4D on this
eโโโโ ((vโeโ + vโeโ + vโeโ + vโeโ) โง (Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ + Bโโeโโ))
=
// (vโeโ)
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโโโ = eโโโโโโโ = -eโโโโโ = eโโโโโ = -eโโโ = eโ = vโBโโeโ
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโโโ = (!)-eโโโโโ = eโโโโโ = -eโโโ = eโ = vโBโโeโ
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโโโ = (!)-eโโโโโ = eโโโ = -eโ = -vโBโโeโ
// (vโeโ)
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโโโ = eโโโโโ = -eโโโ = eโ = vโBโโeโ
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโโโ = eโโโโโ = (!)eโโโ = -eโ = -vโBโโeโ
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโโโ = (!)-eโโโโโ = eโ = vโBโโeโ
// (vโeโ)
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโ = eโโโโโ = -eโโโ = eโ = vโBโโeโ
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโ = (!)-eโโโ = eโ = vโBโโeโ
eโโโโvโeโBโโeโโ = (...) eโโโโโโโ = -eโโโโโ = (!)-eโ = -vโBโโeโ
eโโโโvโeโBโโeโโ = 0
// (vโeโ) - is a bit evil, remember eโโโโโโโ f.e. has โยฒ -1 but โยฒ is 1 still so that's -1 but 0 swaps so far
eโโโโvโeโBโโeโโ = (...) -eโโโโโ = eโ = vโBโโeโ
eโโโโvโeโBโโeโโ = (...) -eโโโ = eโ = vโBโโeโ
eโโโโvโeโBโโeโโ = (...) -eโโโโโ = eโโโโโ = -eโโโ = eโ = vโBโโeโ
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = 0
eโโโโvโeโBโโeโโ = 0
done
2 * p * vโ (Bโโeโ + Bโโeโ - Bโโeโ)
2 * p * vโ (Bโโeโ - Bโโeโ + Bโโeโ)
2 * p * vโ (Bโโeโ + Bโโeโ - Bโโeโ)
2 * p * vโ (Bโโeโ + Bโโeโ + Bโโeโ)
0 mistakes on initial try but thats easy if you can look up 4D
I got hinted on checking you can find the SO(3,1) Lie Group here so the Lorentz-Group which well is not a coincidence as we do spacetime
(sยฒ + pยฒ - โจBยฒโฉโ)v + 2s(v ยท B) + 2I(v โง B) + 2(v ยท B) ยท B
R[0]ยฒ
R[7]ยฒ
-Bโโยฒ -Bโโยฒ -Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ
(sยฒ + pยฒ - โจBยฒโฉโ)v v' = (sยฒ + pยฒ - (-Bโโยฒ -Bโโยฒ -Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ)) eโ
2s(v ยท B) + 2 * s * (-Bโโeโ + Bโโeโ + Bโโeโ)
2I(v โง B) + 2 * p * (Bโโeโ + Bโโeโ - Bโโeโ)
2(v ยท B) ยท B + 2 * (+BโโBโโeโ -Bโโยฒeโ -BโโBโโeโ +BโโBโโeโ -Bโโยฒeโ +BโโBโโeโ +Bโโยฒeโ +BโโBโโeโ +BโโBโโeโ)
eโ Parts
(sยฒ + pยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ - Bโโยฒ) eโ +
2 * (-Bโโยฒeโ -Bโโยฒeโ +Bโโยฒeโ)
= (sยฒ + pยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ +Bโโยฒ - Bโโยฒ - Bโโยฒ) eโ
eโ Parts
2 * s * Bโโeโ +
2 * p * -Bโโeโ +
2 * (+BโโBโโeโ +BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * -Bโโ) + BโโBโโ + BโโBโโ) eโ
eโ Parts
2 * s * -Bโโeโ +
2 * p * Bโโeโ +
2 * (+BโโBโโeโ +BโโBโโeโ)
= 2 * ((s * -Bโโ) + (p * Bโโ) + BโโBโโ + BโโBโโ) eโ
eโ Parts
2 * s * Bโโeโ +
2 * p * Bโโeโ +
2 * (-BโโBโโeโ + BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * Bโโ) - BโโBโโ + BโโBโโ) eโ
(sยฒ + pยฒ - โจBยฒโฉโ)v v' = (sยฒ + pยฒ - (-Bโโยฒ -Bโโยฒ -Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ)) eโ
2s(v ยท B) + 2 * s * (+Bโโeโ - Bโโeโ + Bโโeโ)
2I(v โง B) + 2 * p * (Bโโeโ - Bโโeโ + Bโโeโ)
2(v ยท B) ยท B + 2 * (-Bโโยฒeโ +BโโBโโeโ +BโโBโโeโ +BโโBโโeโ -Bโโยฒeโ -BโโBโโeโ +BโโBโโeโ +Bโโยฒeโ +BโโBโโeโ)
Mโจโฉ โโโยนยฒยณ โโโรร
eโ Parts
2 * s * (-Bโโeโ) +
2 * p * (Bโโeโ) +
2 * (+BโโBโโeโ + BโโBโโeโ)
= 2 * ((s * -Bโโ) + (p * Bโโ) + BโโBโโ + BโโBโโ) eโ
eโ Parts
(sยฒ + pยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ - Bโโยฒ) eโ +
+ 2 * (-Bโโยฒeโ -Bโโยฒeโ +Bโโยฒeโ)
= (sยฒ + pยฒ - Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ + Bโโยฒ - Bโโยฒ) eโ
eโ Parts
2 * s * (+Bโโeโ) +
2 * p * (-Bโโeโ) +
2 * (+BโโBโโeโ +BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * -Bโโ) + BโโBโโ + BโโBโโ) eโ
eโ Parts
2 * s * (Bโโeโ) +
2 * p * (Bโโeโ) +
2 * (+BโโBโโeโ -BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * Bโโ) + BโโBโโ - BโโBโโ) eโ
(sยฒ + pยฒ - โจBยฒโฉโ)v v' = (sยฒ + pยฒ - (-Bโโยฒ -Bโโยฒ -Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ)) eโ
2s(v ยท B) + 2 * s * (-Bโโeโ + Bโโeโ + Bโโeโ)
2I(v โง B) + 2 * p * (Bโโeโ + Bโโeโ - Bโโeโ)
2(v ยท B) ยท B + 2 * (-Bโโยฒeโ +BโโBโโeโ -BโโBโโeโ -Bโโยฒeโ +BโโBโโeโ +BโโBโโeโ +BโโBโโeโ +BโโBโโeโ +Bโโยฒeโ)
eโ Parts
2 * s * (Bโโeโ) +
2 * p * (-Bโโeโ) +
2 * (+BโโBโโeโ +BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * -Bโโ) + BโโBโโ + BโโBโโ) eโ
eโ Parts
2 * s * (-Bโโeโ) +
2 * p * (Bโโeโ) +
2 * (+BโโBโโeโ + BโโBโโeโ)
= 2 * ((s * -Bโโ) + (p * Bโโ) + BโโBโโ + BโโBโโ) eโ
eโ Parts
(sยฒ + pยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ - Bโโยฒ) eโ +
2 * (-Bโโยฒeโ -Bโโยฒeโ +Bโโยฒeโ )
= (sยฒ + pยฒ - Bโโยฒ - Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ + Bโโยฒ) eโ
eโ Parts
2 * s * (Bโโeโ) +
2 * p * (Bโโeโ) +
2 * (-BโโBโโeโ +BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * Bโโ) - BโโBโโ + BโโBโโ) eโ
(sยฒ + pยฒ - โจBยฒโฉโ)v v' = (sยฒ + pยฒ - (-Bโโยฒ -Bโโยฒ -Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ)) eโ
2s(v ยท B) + 2 * s * (+Bโโeโ + Bโโeโ + Bโโeโ)
2I(v โง B) + 2 * p * (Bโโeโ + Bโโeโ + Bโโeโ)
2(v ยท B) ยท B + 2 * (-BโโBโโeโ +BโโBโโeโ +Bโโยฒeโ +BโโBโโeโ -BโโBโโeโ +Bโโยฒeโ -BโโBโโeโ +BโโBโโeโ +Bโโยฒeโ)
eโ Parts
2 * s * (+Bโโeโ) +
2 * p * (Bโโeโ) +
2 * (-BโโBโโeโ +BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * Bโโ) - BโโBโโ + BโโBโโ) eโ
eโ Parts
2 * s * (Bโโeโ) +
2 * p * (Bโโeโ) +
2 * (+BโโBโโeโ -BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * Bโโ) + BโโBโโ - BโโBโโ) eโ
eโ Parts
2 * s * (Bโโeโ) +
2 * p * (Bโโeโ) +
2 * (-BโโBโโeโ +BโโBโโeโ)
= 2 * ((s * Bโโ) + (p * Bโโ) - BโโBโโ + BโโBโโ) eโ
eโ Parts
(sยฒ + pยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ - Bโโยฒ) eโ +
2 * (+Bโโยฒeโ +Bโโยฒeโ +Bโโยฒeโ)
= (sยฒ + pยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ) eโ
v'โ = (sยฒ + pยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ) vโ +
2 * ((s * -Bโโ) + (p * Bโโ) + BโโBโโ + BโโBโโ) vโ +
2 * ((s * Bโโ) + (p * -Bโโ) + BโโBโโ + BโโBโโ) vโ +
2 * ((s * Bโโ) + (p * Bโโ) - BโโBโโ + BโโBโโ) vโ
v'โ = 2 * ((s * Bโโ) + (p * -Bโโ) + BโโBโโ + BโโBโโ) vโ +
(sยฒ + pยฒ - Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ + Bโโยฒ - Bโโยฒ) vโ +
2 * ((s * -Bโโ) + (p * Bโโ) + BโโBโโ + BโโBโโ) vโ +
2 * ((s * Bโโ) + (p * Bโโ) + BโโBโโ - BโโBโโ) vโ
v'โ = 2 * ((s * -Bโโ) + (p * Bโโ) + BโโBโโ + BโโBโโ) vโ +
2 * ((s * Bโโ) + (p * -Bโโ) + BโโBโโ + BโโBโโ) vโ +
(sยฒ + pยฒ - Bโโยฒ - Bโโยฒ + Bโโยฒ - Bโโยฒ - Bโโยฒ + Bโโยฒ) vโ +
2 * ((s * Bโโ) + (p * Bโโ) - BโโBโโ + BโโBโโ) vโ
v'โ = 2 * ((s * Bโโ) + (p * Bโโ) - BโโBโโ + BโโBโโ) vโ +
2 * ((s * Bโโ) + (p * Bโโ) + BโโBโโ - BโโBโโ) vโ +
2 * ((s * Bโโ) + (p * Bโโ) - BโโBโโ + BโโBโโ) vโ +
(sยฒ + pยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ + Bโโยฒ) vโ
i made lots of mistakes here sadly ... corrected i think but well, ill see
โจMโฉ(2)
eโโ eโโ eโโ eยณยน โง
R1 ร R2
R1*R2 = (R1[0] + R1[1] eโโ + R1[2] eโโ + R1[3] eโโ + R1[4] eโโ + R1[5] eโโ + R1[6] eโโ + R1[7] eโโโโ)
* (R2[0] + R2[1] eโโ + R2[2] eโโ + R2[3] eโโ + R2[4] eโโ + R2[5] eโโ + R2[6] eโโ + R2[7] eโโโโ)
= R1[0] R2[0] + R1[0] R2[1] eโโ + R1[0] R2[2] eโโ + R1[0] R2[3] eโโ + R1[0] R2[4] eโโ + R1[0] R2[5] eโโ + R1[0] R2[6] eโโ + R1[0] R2[7] eโโโโ
+ R1[1] eโโ R2[0] + R1[1] eโโ R2[1] eโโ + R1[1] eโโ R2[2] eโโ + R1[1] eโโ R2[3] eโโ + R1[1] eโโ R2[4] eโโ + R1[1] eโโ R2[5] eโโ + R1[1] eโโ R2[6] eโโ + R1[1] eโโ R2[7] eโโโโ
+ R1[2] eโโ R2[0] + R1[2] eโโ R2[1] eโโ + R1[2] eโโ R2[2] eโโ + R1[2] eโโ R2[3] eโโ + R1[2] eโโ R2[4] eโโ + R1[2] eโโ R2[5] eโโ + R1[2] eโโ R2[6] eโโ + R1[2] eโโ R2[7] eโโโโ
+ R1[3] eโโ R2[0] + R1[3] eโโ R2[1] eโโ + R1[3] eโโ R2[2] eโโ + R1[3] eโโ R2[3] eโโ + R1[3] eโโ R2[4] eโโ + R1[3] eโโ R2[5] eโโ + R1[3] eโโ R2[6] eโโ + R1[3] eโโ R2[7] eโโโโ
+ R1[4] eโโ R2[0] + R1[4] eโโ R2[1] eโโ + R1[4] eโโ R2[2] eโโ + R1[4] eโโ R2[3] eโโ + R1[4] eโโ R2[4] eโโ + R1[4] eโโ R2[5] eโโ + R1[4] eโโ R2[6] eโโ + R1[4] eโโ R2[7] eโโโโ
+ R1[5] eโโ R2[0] + R1[5] eโโ R2[1] eโโ + R1[5] eโโ R2[2] eโโ + R1[5] eโโ R2[3] eโโ + R1[5] eโโ R2[4] eโโ + R1[5] eโโ R2[5] eโโ + R1[5] eโโ R2[6] eโโ + R1[5] eโโ R2[7] eโโโโ
+ R1[6] eโโ R2[0] + R1[6] eโโ R2[1] eโโ + R1[6] eโโ R2[2] eโโ + R1[6] eโโ R2[3] eโโ + R1[6] eโโ R2[4] eโโ + R1[6] eโโ R2[5] eโโ + R1[6] eโโ R2[6] eโโ + R1[6] eโโ R2[7] eโโโโ
+ R1[7] eโโโโ R2[0] + R1[7] eโโโโ R2[1] eโโ + R1[7] eโโโโ R2[2] eโโ + R1[7] eโโโโ R2[3] eโโ + R1[7] eโโโโ R2[4] eโโ + R1[7] eโโโโ R2[5] eโโ + R1[7] eโโโโ R2[6] eโโ + R1[7] eโโโโ R2[7] eโโโโ
First lets solve all same planes to -1 (spatial) and 1 (with time eโ / boosts)
R1*R2 = (R1[0] + R1[1] eโโ + R1[2] eโโ + R1[3] eโโ + R1[4] eโโ + R1[5] eโโ + R1[6] eโโ + R1[7] eโโโโ)
* (R2[0] + R2[1] eโโ + R2[2] eโโ + R2[3] eโโ + R2[4] eโโ + R2[5] eโโ + R2[6] eโโ + R2[7] eโโโโ)
= R1[0] R2[0] + R1[0] R2[1] eโโ + R1[0] R2[2] eโโ + R1[0] R2[3] eโโ + R1[0] R2[4] eโโ + R1[0] R2[5] eโโ + R1[0] R2[6] eโโ + R1[0] R2[7] eโโโโ
+ R1[1] eโโ R2[0] - R1[1] R2[1] + R1[1] eโโ R2[2] eโโ + R1[1] eโโ R2[3] eโโ + R1[1] eโโ R2[4] eโโ + R1[1] eโโ R2[5] eโโ + R1[1] eโโ R2[6] eโโ + R1[1] eโโ R2[7] eโโโโ
+ R1[2] eโโ R2[0] + R1[2] eโโ R2[1] eโโ - R1[2] R2[2] + R1[2] eโโ R2[3] eโโ + R1[2] eโโ R2[4] eโโ + R1[2] eโโ R2[5] eโโ + R1[2] eโโ R2[6] eโโ + R1[2] eโโ R2[7] eโโโโ
+ R1[3] eโโ R2[0] + R1[3] eโโ R2[1] eโโ + R1[3] eโโ R2[2] eโโ - R1[3] R2[3] + R1[3] eโโ R2[4] eโโ + R1[3] eโโ R2[5] eโโ + R1[3] eโโ R2[6] eโโ + R1[3] eโโ R2[7] eโโโโ
+ R1[4] eโโ R2[0] + R1[4] eโโ R2[1] eโโ + R1[4] eโโ R2[2] eโโ + R1[4] eโโ R2[3] eโโ + R1[4] R2[4] + R1[4] eโโ R2[5] eโโ + R1[4] eโโ R2[6] eโโ + R1[4] eโโ R2[7] eโโโโ
+ R1[5] eโโ R2[0] + R1[5] eโโ R2[1] eโโ + R1[5] eโโ R2[2] eโโ + R1[5] eโโ R2[3] eโโ + R1[5] eโโ R2[4] eโโ + R1[5] R2[5] + R1[5] eโโ R2[6] eโโ + R1[5] eโโ R2[7] eโโโโ
+ R1[6] eโโ R2[0] + R1[6] eโโ R2[1] eโโ + R1[6] eโโ R2[2] eโโ + R1[6] eโโ R2[3] eโโ + R1[6] eโโ R2[4] eโโ + R1[6] eโโ R2[5] eโโ + R1[6] R2[6] + R1[6] eโโ R2[7] eโโโโ
+ R1[7] eโโโโ R2[0] + R1[7] eโโโโ R2[1] eโโ + R1[7] eโโโโ R2[2] eโโ + R1[7] eโโโโ R2[3] eโโ + R1[7] eโโโโ R2[4] eโโ + R1[7] eโโโโ R2[5] eโโ + R1[7] eโโโโ R2[6] eโโ + R1[7] eโโโโ R2[7] eโโโโ
eโโโโยฒ = eโโโโโโโโ = -eโโโโโโโโ = eโโโโโโโโ = -eโโโโโโ = eโโโโโโ = -eโโโโ = eโโ = -1
Lets do all plane multipications sharing an axis
R1*R2 = (R1[0] + R1[1] eโโ + R1[2] eโโ + R1[3] eโโ + R1[4] eโโ + R1[5] eโโ + R1[6] eโโ + R1[7] eโโโโ)
* (R2[0] + R2[1] eโโ + R2[2] eโโ + R2[3] eโโ + R2[4] eโโ + R2[5] eโโ + R2[6] eโโ + R2[7] eโโโโ)
= R1[0] R2[0] + R1[0] R2[1] eโโ + R1[0] R2[2] eโโ + R1[0] R2[3] eโโ + R1[0] R2[4] eโโ + R1[0] R2[5] eโโ + R1[0] R2[6] eโโ + R1[0] R2[7] eโโโโ
+ R1[1] eโโ R2[0] - R1[1] R2[1] - R1[1] R2[2] eโโ + R1[1] R2[3] eโโ + R1[1] R2[4] eโโโโ - R1[1] R2[5] eโโ + R1[1] R2[6] eโโ - R1[1] R2[7] eโโ
+ R1[2] eโโ R2[0] + R1[2] R2[1] eโโ - R1[2] R2[2] - R1[2] R2[3] eโโ + R1[2] R2[4] eโโ + R1[2] R2[5] eโโโโ - R1[2] R2[6] eโโ - R1[2] R2[7] eโโ
+ R1[3] eโโ R2[0] - R1[3] R2[1] eโโ + R1[3] R2[2] eโโ - R1[3] R2[3] - R1[3] R2[4] eโโ + R1[3] R2[5] eโโ + R1[3] R2[6] eโโโโ - R1[3] R2[7] eโโ
+ R1[4] eโโ R2[0] + R1[4] R2[1] eโโโโ - R1[4] R2[2] eโโ + R1[4] R2[3] eโโ + R1[4] R2[4] + R1[4] R2[5] eโโ - R1[4] R2[6] eโโ + R1[4] R2[7] eโโ
+ R1[5] eโโ R2[0] + R1[5] R2[1] eโโ + R1[5] R2[2] eโโโโ - R1[5] R2[3] eโโ - R1[5] R2[4] eโโ + R1[5] R2[5] + R1[5] R2[6] eโโ + R1[5] R2[7] eโโ
+ R1[6] eโโ R2[0] - R1[6] R2[1] eโโ + R1[6] R2[2] eโโ + R1[6] R2[3] eโโโโ + R1[6] R2[4] eโโ - R1[6] R2[5] eโโ + R1[6] R2[6] + R1[6] R2[7] eโโ
+ R1[7] eโโโโ R2[0] - R1[7] R2[1] eโโ - R1[7] R2[2] eโโ - R1[7] R2[3] eโโ + R1[7] R2[4] eโโ + R1[7] R2[5] eโโ + R1[7] R2[6] eโโ - R1[7] R2[7]
For some reason, i should know better, i made lots of mistakes here
R'[0] s = R1[0] R2[0] - R1[1] R2[1] - R1[2] R2[2] - R1[3] R2[3] + R1[4] R2[4] + R1[5] R2[5] + R1[6] R2[6] - R1[7] R2[7]
R'[1] eโโ = R1[0] R2[1] + R1[1] R2[0] - R1[2] R2[3] + R1[3] R2[2] + R1[4] R2[7] + R1[5] R2[6] - R1[6] R2[5] + R1[7] R2[4]
R'[2] eโโ = R1[0] R2[2] + R1[1] R2[3] + R1[2] R2[0] - R1[3] R2[1] - R1[4] R2[6] + R1[5] R2[7] + R1[6] R2[4] + R1[7] R2[5]
R'[3] eโโ = R1[0] R2[3] - R1[1] R2[2] + R1[2] R2[1] + R1[3] R2[0] + R1[4] R2[5] - R1[5] R2[4] + R1[6] R2[7] + R1[7] R2[6]
R'[4] eโโ = R1[0] R2[4] - R1[1] R2[7] - R1[2] R2[6] + R1[3] R2[5] + R1[4] R2[0] - R1[5] R2[3] + R1[6] R2[2] - R1[7] R2[1]
R'[5] eโโ = R1[0] R2[5] + R1[1] R2[6] - R1[2] R2[7] - R1[3] R2[4] + R1[4] R2[3] + R1[5] R2[0] - R1[6] R2[1] - R1[7] R2[2]
R'[6] eโโ = R1[0] R2[6] - R1[1] R2[5] + R1[2] R2[4] - R1[3] R2[7] - R1[4] R2[2] + R1[5] R2[1] + R1[6] R2[0] - R1[7] R2[3]
R'[7] eโโโโ = R1[0] R2[7] + R1[1] R2[4] + R1[2] R2[5] + R1[3] R2[6] + R1[4] R2[1] + R1[5] R2[2] + R1[6] R2[3] + R1[7] R2[0]
static multiply(a: Rot4, b: Rot4): Rot4 {
const s1 = a[0], yz1 = a[1], zx1 = a[2], xy1 = a[3], xw1 = a[4], yw1 = a[5], zw1 = a[6], p1 = a[7];
const s2 = b[0], yz2 = b[1], zx2 = b[2], xy2 = b[3], xw2 = b[4], yw2 = b[5], zw2 = b[6], p2 = b[7];
const s = (s1 * s2 - yz1 * yz2) - (zx1 * zx2) - (xy1 * xy2) + (xw1 * xw2) + (yw1 * yw2) + (zw1 * zw2) - (p1 * p2);
const eyz = (s1 * yz2) + (yz1 * s2) - (zx1 * xy2) + (xy1 * zx2) + (xw1 * p2) + (yw1 * zw2) - (zw1 * yw2) + (p1 * xw2);
const ezx = (s1 * zx2) + (yz1 * xy2) + (zx1 * s2) - (xy1 * yz2) - (xw1 * zw2) + (yw1 * p2) + (zw1 * xw2) + (p1 * yw2);
const exy = (s1 * xy2) - (yz1 * zx2) + (zx1 * yz2) + (xy1 * s2) + (xw1 * yw2) - (yw1 * xw2) + (zw1 * p2) + (p1 * zw2);
const exw = (s1 * xw2) - (yz1 * p2) - (zx1 * zw2) + (xy1 * yw2) + (xw1 * s2) - (yw1 * xy2) + (zw1 * zx2) - (p1 * yz2);
const eyw = (s1 * yw2) + (yz1 * zw2) - (zx1 * p2) - (xy1 * xw2) + (xw1 * xy2) + (yw1 * s2) - (zw1 * yz2) - (p1 * zx2);
const ezw = (s1 * zw2) - (yz1 * yw2) + (zx1 * xw2) - (xy1 * p2) - (xw1 * zx2) + (yw1 * yz2) + (zw1 * s2) - (p1 * xy2);
const exyzw = (s1 * p2) + (yz1 * xw2) + (zx1 * yw2) + (xy1 * zw2) + (xw1 * yz2) + (yw1 * zx2) + (zw1 * xy2) + (p1 * s2);
const out = new Float32Array([s, eyz, ezx, exy, exw, eyw, ezw, exyzw]);
return out;
}
static rotateVector4(r: Rot4, v: Vec4): Vec4 {
const s = r[0], yz = r[1], zx = r[2], xy = r[3],
xw = r[4], yw = r[5], zw = r[6], p = r[7];
// Helper squares
const s_2 = s * s;
const yz_2 = yz * yz, zx_2 = zx * zx, xy_2 = xy * xy;
const xw_2 = xw * xw, yw_2 = yw * yw, zw_2 = zw * zw;
const p_2 = p * p;
const out = new Float32Array(4);
out[0] = ((s_2 + p_2 + yz_2 - zx_2 - xy_2 + xw_2 - yw_2 - zw_2) * v[0]) +
(2 * ((s * -xy) + (p * zw) + (yz * zx) + (yw * xw)) * v[1]) +
(2 * ((s * zx) + (p * -yw) + (yz * xy) + (zw * xw)) * v[2]) +
(2 * ((s * xw) + (p * yz) - (yw * xy) + (zw * zx)) * v[3])
out[1] = (2 * ((s * xy) + (p * -zw) + (zx * yz) + (xw * yw)) * v[0]) +
((s_2 + p_2 - yz_2 + zx_2 - xy_2 - xw_2 + yw_2 - zw_2) * v[1]) +
(2 * ((s * -yz) + (p * xw) + (zx * xy) + (zw * yw)) * v[2]) +
(2 * ((s * yw) + (p * zx) + (xw * xy) - (zw * yz)) * v[3])
out[2] = (2 * ((s * -zx) + (p * yw) + (xy * yz) + (xw * zw)) * v[0]) +
(2 * ((s * yz) + (p * -xw) + (xy * zx) + (yw * zw)) * v[1]) +
((s_2 + p_2 - yz_2 - zx_2 + xy_2 - xw_2 - yw_2 + zw_2) * v[2]) +
(2 * ((s * zw) + (p * xy) - (xw * zx) + (yw * yz)) * v[3])
out[3] = (2 * ((s * xw) + (p * yz) - (zx * zw) + (xy * yw)) * v[0]) +
(2 * ((s * yw) + (p * zx) + (yz * zw) - (xy * xw)) * v[1]) +
(2 * ((s * zw) + (p * xy) - (yz * yw) + (zx * xw)) * v[2]) +
((s_2 + p_2 + yz_2 + zx_2 + xy_2 + xw_2 + yw_2 + zw_2) * v[3])
return out;
}
static toMat4(r: Rot4): Mat4 {
const s = r[0], yz = r[1], zx = r[2], xy = r[3],
xw = r[4], yw = r[5], zw = r[6], p = r[7];
// Helper squares
const s_2 = s * s;
const yz_2 = yz * yz, zx_2 = zx * zx, xy_2 = xy * xy;
const xw_2 = xw * xw, yw_2 = yw * yw, zw_2 = zw * zw;
const p_2 = p * p;
const out = MAT4_IDENTITY.slice();
// all vโ parts IN TO OUT v'โ to v'โ - COLUMN MAYOR!!
// COLUMN 0 (Basis X: v=[1, 0, 0, 0])
out[0] = (s_2 + p_2 + yz_2 - zx_2 - xy_2 + xw_2 - yw_2 - zw_2);
out[1] = 2 * ((s * xy) + (p * -zw) + (zx * yz) + (xw * yw));
out[2] = 2 * ((s * -zx) + (p * yw) + (xy * yz) + (xw * zw));
out[3] = 2 * ((s * xw) + (p * yz) - (zx * zw) + (xy * yw));
// COLUMN 1 (Basis Y: v=[0, 1, 0, 0])
out[4] = 2 * ((s * -xy) + (p * zw) + (yz * zx) + (yw * xw));
out[5] = (s_2 + p_2 - yz_2 + zx_2 - xy_2 - xw_2 + yw_2 - zw_2);
out[6] = 2 * ((s * yz) + (p * -xw) + (xy * zx) + (yw * zw));
out[7] = 2 * ((s * yw) + (p * zx) + (yz * zw) - (xy * xw));
// COLUMN 2 (Basis Z: v=[0, 0, 1, 0])
out[8] = 2 * ((s * zx) + (p * -yw) + (yz * xy) + (zw * xw));
out[9] = 2 * ((s * -yz) + (p * xw) + (zx * xy) + (zw * yw));
out[10] = (s_2 + p_2 - yz_2 - zx_2 + xy_2 - xw_2 - yw_2 + zw_2);
out[11] = 2 * ((s * zw) + (p * xy) - (yz * yw) + (zx * xw));
// COLUMN 3 (Basis W: v=[0, 0, 0, 1])
out[12] = 2 * ((s * xw) + (p * yz) - (yw * xy) + (zw * zx));
out[13] = 2 * ((s * yw) + (p * zx) + (xw * xy) - (zw * yz));
out[14] = 2 * ((s * zw) + (p * xy) - (xw * zx) + (yw * yz));
out[15] = (s_2 + p_2 + yz_2 + zx_2 + xy_2 + xw_2 + yw_2 + zw_2);
return out;
}