diff --git a/codegen/src/main.rs b/codegen/src/main.rs index 2369fb9..e714eef 100644 --- a/codegen/src/main.rs +++ b/codegen/src/main.rs @@ -180,7 +180,8 @@ fn main() { } if let Some(b_trait_implementations) = trait_implementations.get(¶meter_b.multi_vector_class().class_name) { if let Some(inverse) = b_trait_implementations.1.get("Inverse") { - let division = MultiVectorClass::derive_division("Div", &geometric_product, &inverse, ¶meter_a, ¶meter_b); + let division = + MultiVectorClass::derive_division("GeometricQuotient", &geometric_product, &inverse, ¶meter_a, ¶meter_b); emitter.emit(&division).unwrap(); } } diff --git a/src/lib.rs b/src/lib.rs index 0271d0d..c406cc2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -80,7 +80,7 @@ impl Ln for ppga2d::Translator { fn ln(self) -> ppga2d::IdealPoint { let result: ppga2d::IdealPoint = self.into(); - result / ppga2d::Scalar::from([self[0]]) + result.geometric_product(ppga2d::Scalar::from([1.0 / self[0]])) } } @@ -148,7 +148,7 @@ impl Ln for ppga3d::Translator { fn ln(self) -> ppga3d::IdealPoint { let result: ppga3d::IdealPoint = self.into(); - result / ppga3d::Scalar::from([self[0]]) + result.geometric_product(ppga3d::Scalar::from([1.0 / self[0]])) } } @@ -252,6 +252,12 @@ pub trait GeometricProduct { fn geometric_product(self, other: T) -> Self::Output; } +/// General multi vector division +pub trait GeometricQuotient { + type Output; + fn geometric_quotient(self, other: T) -> Self::Output; +} + /// Dual of the geometric product grade filtered by `t == r + s` /// /// Also called join