458 D. Fontijne and L. Dorst
defines the join as the outer (wedge) product (i.e., join(A, B) =A ∧B) and the meet
as meet(A, B) = (A
∗
∧B
∗
)
∗
, where the dual
∗
is with respect to the whole vector
space. As a result, software packages based on these definitions (such as Bige-
bra/CLIFFORD [1]) require the dimension of the vector space to be set (dim_V
:= ...) before computing the meet. For example, in CLIFFORD:
> dim_V:=3: M3:=meet(e1we2,e2we3);
M3 := -e2
> dim_V:=4: M4:=meet(e1we2,e2we3);
M4 := 0
This shows that in CLIFFORD the meaning of intersection (
meet) depends on the
dimension of the full space, which we find rather strange. So once again, we would
like to stress that this paper is about computing the
join (and indirectly the meet)of
blades in any geometric (possibly degenerate) situation. That is, the
join is the true
geometric subspace union, e.g.,
join(e
1
, e
1
) =e
1
and not join(e
1
, e
1
) =0.
In this paper, we present a new blade factorization algorithm for blades rep-
resented as a sum of based blades. We also use the new factorization algo-
rithm to construct a new algorithm to compute the
join. Both new algorithms
are improvements of previous work [2, 3, 6]. Our main contributions are the
FastFactorization algorithm, which factors blades by simply rearranging coordi-
nates, and the StableFastJoin algorithm, which efficiently computes the
join in a
numerically stable way.
Having a fast and stable
join implementation is especially important because it
encourages people to make proper use of geometric algebra. One of the great ad-
vantages of geometric algebra is that many equations are universal and that the
join
allows for universal subspace union. However, if it is perceived as slow in practice,
people will rewrite their equations to avoid the
join and replace it with linear inner
and outer products. This will often break the universality of their equations, splitting
one
join into many different cases (e.g., if the variable is a line, then do this; if the
variable is a plane, then do that; and so on).
We only briefly consider computing the
meet (true subspace intersection) in
Sect. 5.3. Experimentation showed that adjusting our FastJoin algorithm to com-
pute the
meet directly is somewhat slower than computing it from the join using [6]
meet(A, B) =
Bjoin(A, B)
−1
A (1)
and also leads to more generated code. This is why the topic is ignored in the main
text.
We assume a Euclidean metric in all computations, as both factorization and
join
are metric-independent operations (i.e., we use the LIFT described in [4]). Through-
out the paper, n is the dimension of the vector space V
n
, and k is used to denote the
grade of the blade in the current context.