-
Notifications
You must be signed in to change notification settings - Fork 69
Description
The multivector method .is_versor() purports to follow the test on p. 533 of Leo Dorst's Geometric Algebra for Computer Science. But:
- Dorst's test itself, as it appears in GACS, is incorrect, as shown by a simple counterexample.
- The algorithm used in
.is_versor()does not faithfully implement Dorst's test. - The algorithm used in
.is_versor()has a simple counterexample.
I have devised four conditions satisfied by versors which, if satisfied, also imply that a multivector is a versor. I am currently checking with Dorst as to his opinion, but I'm pretty confident in my reasoning.
Let V be a multivector, and let V.rev() and V.g_invol() be its reverse and grade involute. Let x be a generic 1-vector. Then V will be a versor if and only if it meets each of the following conditions:
V * V.rev()andV.rev() * Vare both scalars.V * V.rev()is not zero.V.g_invol() * V.rev()is a scalar.V.g_invol() * x * V.rev()is a vector.
The counterexamples, if anyone's interested, are these:
- To Dorst's test as it appears in GACS: Let V = 1 + I where I = e0 e1 e2 e3 is the unit pseudoscalar of the spacetime algebra G(1,3). Then V meets the conditions described by GACS, but the geometric product V (reverse of V) is not a scalar, showing that V cannot be a versor.
- To the algorithm currently used in
.is_versor(): Let V = e1 + e2 e3 in the algebra G(3,0) of Euclidean 3-space. Then V passes the test in.is_versor(), but V cannot be a versor as it is a mixture of odd and even grades.
I will post further after hearing back from Dorst. In the meanwhile, I have a proposed rewrite of the .is_versor() method that I am testing. Once my testing is satisfied, I'll post my rewrite here.
Greg Grunberg
[email protected]
2025 March 04