Open AnIrishDuck opened 2 years ago
Hey, thanks for working on this. I've looked over it a couple times and thought it over in my head. I am not sure that this is the direction I want to take the library or not. The trait-with-associated-types style is not really where it started, and though I definitely want to have a more "real" geometric multiplication (and other associated geometric algebra methods) in the future, I've sort of been filing these under the "to-add-in-GA-rewrite" category. Unfortunately, since most of my development bandwidth is taken up by work these days, I'm not sure when that will happen either 😓
No worries! This wasn't much work; I'm definitely glad to know early in the process.
In the interim, I've started thinking about whether it makes more sense to add onto / create an extension library for nalgebra instead. Bivector operations in particular are super useful for my current hobby domain (orbital transfer calculations).
Hope you can find more time to work on this library, but I know how that goes with work :)
Add a
GeometricMul
trait for geometric multiplication. Implement it forvector.gmul(vector)
andbivector.gmul(bivector)
.Ideally it'd be implemented across all types, which I may get to. I wanted to double check that this is an agreeable direction first.
Also, fixed an apparent bug in the
Div
impl
for bivectors. I also think there's a bug in thedot
method of bivectors, but am less confident on that. I'm working on double checking against literature / other libraries.The test here uses quickcheck; I've found property-based testing to be nice for "abstract" math libraries. It also demonstrates the utility of defining the geometric product across types. It's theoretically possible to generate a multiplicative inverse for anything in G3. Specifically, in rust, all we need is something that implements
GeometricMul
and has areverse
.If this looks good, I'll work on adding a
Reverse
trait next. I can then easily add property tests to check inversion of other types. This may catch further errors, like thediv
issue in bivectors.