From 23959e1af8be2cbc55d1b6fbebb95570bdf1f2f5 Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Thu, 25 Aug 2022 11:22:36 +0200 Subject: [PATCH 1/4] Implement exponential map for translator --- .github/workflows/actions.yaml | 2 +- src/lib.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/workflows/actions.yaml b/.github/workflows/actions.yaml index 37ca833..46fc3e7 100644 --- a/.github/workflows/actions.yaml +++ b/.github/workflows/actions.yaml @@ -36,7 +36,7 @@ jobs: - name: epga3d descriptor: "epga3d:1,1,1,1;Scalar:1;MultiVector:1,e23,-e13,e12|e0,-e023,e013,-e012|e123,e1,e2,e3|e0123,e01,e02,e03;Rotor:1,e23,-e13,e12;Point:e123,-e023,e013,-e012;Plane:e0,e1,e2,e3;Line:e01,e02,e03|e23,-e13,e12;Translator:1,e01,e02,e03;Motor:1,e23,-e13,e12|e0123,e01,e02,e03;PointAndPlane:e123,-e023,e013,-e012|e0,e1,e2,e3" - name: ppga3d - descriptor: "ppga3d:0,1,1,1;Scalar:1;MultiVector:1,e23,-e13,e12|e0,-e023,e013,-e012|e123,e1,e2,e3|e0123,e01,e02,e03;Rotor:1,e23,-e13,e12;Point:e123,-e023,e013,-e012;Plane:e0,e1,e2,e3;Line:e01,e02,e03|e23,-e13,e12;Translator:1,e01,e02,e03;Motor:1,e23,-e13,e12|e0123,e01,e02,e03;PointAndPlane:e123,-e023,e013,-e012|e0,e1,e2,e3" + descriptor: "ppga3d:0,1,1,1;Scalar:1;MultiVector:1,e23,-e13,e12|e0,-e023,e013,-e012|e123,e1,e2,e3|e0123,e01,e02,e03;Rotor:1,e23,-e13,e12;Point:e123,-e023,e013,-e012;Plane:e0,e1,e2,e3;Line:e01,e02,e03|e23,-e13,e12;Branch:e01,e02,e03;Translator:1,e01,e02,e03;Motor:1,e23,-e13,e12|e0123,e01,e02,e03;PointAndPlane:e123,-e023,e013,-e012|e0,e1,e2,e3" - name: hpga3d descriptor: "hpga3d:-1,1,1,1;Scalar:1;MultiVector:1,e23,-e13,e12|e0,-e023,e013,-e012|e123,e1,e2,e3|e0123,e01,e02,e03;Rotor:1,e23,-e13,e12;Point:e123,-e023,e013,-e012;Plane:e0,e1,e2,e3;Line:e01,e02,e03|e23,-e13,e12;Translator:1,e01,e02,e03;Motor:1,e23,-e13,e12|e0123,e01,e02,e03;PointAndPlane:e123,-e023,e013,-e012|e0,e1,e2,e3" steps: diff --git a/src/lib.rs b/src/lib.rs index b13ecbc..fe96801 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -206,6 +206,38 @@ impl Powf for ppga3d::Motor { } } +impl Exp for ppga3d::Branch { + type Output = ppga3d::Translator; + + fn exp(self) -> ppga3d::Translator { + ppga3d::Translator { + g0: simd::Simd32x4 { + f32x4: [1.0, self.g0[0], self.g0[1], self.g0[2]], + } + } + } +} + +impl Ln for ppga3d::Translator { + type Output = ppga3d::Branch; + + fn ln(self) -> ppga3d::Branch { + ppga3d::Branch { + g0: simd::Simd32x3 { + f32x3: [self.g0[1] / self.g0[0], self.g0[2] / self.g0[0], self.g0[3] / self.g0[0]], + } + } + } +} + +impl Powf for ppga3d::Translator { + type Output = Self; + + fn powf(self, exponent: f32) -> Self { + (ppga3d::Scalar { g0: exponent } * self.ln()).exp() + } +} + /// All elements set to `0.0` pub trait Zero { fn zero() -> Self; From 4ad771959c9ef2ed9f847c5cfff565ac6e7db089 Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Mon, 29 Aug 2022 16:43:48 +0200 Subject: [PATCH 2/4] Fix naming Branch is (e12, e23, e31) Ideal line is (e01, e02, e03) --- .github/workflows/actions.yaml | 2 +- src/lib.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/actions.yaml b/.github/workflows/actions.yaml index 46fc3e7..a041669 100644 --- a/.github/workflows/actions.yaml +++ b/.github/workflows/actions.yaml @@ -36,7 +36,7 @@ jobs: - name: epga3d descriptor: "epga3d:1,1,1,1;Scalar:1;MultiVector:1,e23,-e13,e12|e0,-e023,e013,-e012|e123,e1,e2,e3|e0123,e01,e02,e03;Rotor:1,e23,-e13,e12;Point:e123,-e023,e013,-e012;Plane:e0,e1,e2,e3;Line:e01,e02,e03|e23,-e13,e12;Translator:1,e01,e02,e03;Motor:1,e23,-e13,e12|e0123,e01,e02,e03;PointAndPlane:e123,-e023,e013,-e012|e0,e1,e2,e3" - name: ppga3d - descriptor: "ppga3d:0,1,1,1;Scalar:1;MultiVector:1,e23,-e13,e12|e0,-e023,e013,-e012|e123,e1,e2,e3|e0123,e01,e02,e03;Rotor:1,e23,-e13,e12;Point:e123,-e023,e013,-e012;Plane:e0,e1,e2,e3;Line:e01,e02,e03|e23,-e13,e12;Branch:e01,e02,e03;Translator:1,e01,e02,e03;Motor:1,e23,-e13,e12|e0123,e01,e02,e03;PointAndPlane:e123,-e023,e013,-e012|e0,e1,e2,e3" + descriptor: "ppga3d:0,1,1,1;Scalar:1;MultiVector:1,e23,-e13,e12|e0,-e023,e013,-e012|e123,e1,e2,e3|e0123,e01,e02,e03;Rotor:1,e23,-e13,e12;Point:e123,-e023,e013,-e012;Plane:e0,e1,e2,e3;Line:e01,e02,e03|e23,-e13,e12;IdealLine:e01,e02,e03;Translator:1,e01,e02,e03;Motor:1,e23,-e13,e12|e0123,e01,e02,e03;PointAndPlane:e123,-e023,e013,-e012|e0,e1,e2,e3" - name: hpga3d descriptor: "hpga3d:-1,1,1,1;Scalar:1;MultiVector:1,e23,-e13,e12|e0,-e023,e013,-e012|e123,e1,e2,e3|e0123,e01,e02,e03;Rotor:1,e23,-e13,e12;Point:e123,-e023,e013,-e012;Plane:e0,e1,e2,e3;Line:e01,e02,e03|e23,-e13,e12;Translator:1,e01,e02,e03;Motor:1,e23,-e13,e12|e0123,e01,e02,e03;PointAndPlane:e123,-e023,e013,-e012|e0,e1,e2,e3" steps: diff --git a/src/lib.rs b/src/lib.rs index fe96801..29778d8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -206,7 +206,7 @@ impl Powf for ppga3d::Motor { } } -impl Exp for ppga3d::Branch { +impl Exp for ppga3d::IdealLine { type Output = ppga3d::Translator; fn exp(self) -> ppga3d::Translator { @@ -219,10 +219,10 @@ impl Exp for ppga3d::Branch { } impl Ln for ppga3d::Translator { - type Output = ppga3d::Branch; + type Output = ppga3d::IdealLine; - fn ln(self) -> ppga3d::Branch { - ppga3d::Branch { + fn ln(self) -> ppga3d::IdealLine { + ppga3d::IdealLine { g0: simd::Simd32x3 { f32x3: [self.g0[1] / self.g0[0], self.g0[2] / self.g0[0], self.g0[3] / self.g0[0]], } From 2462e5ea66600a97516345c89369eb12e3b429ae Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Sun, 9 Oct 2022 12:51:43 +0200 Subject: [PATCH 3/4] Implement translator exponentiation for ppga2d --- src/lib.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 29778d8..97adf7b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -79,6 +79,37 @@ impl Powf for epga1d::ComplexNumber { } } +impl Exp for ppga2d::IdealPoint { + type Output = ppga2d::Translator; + + fn exp(self) -> ppga2d::Translator { + ppga2d::Translator { + g0: simd::Simd32x3 { + f32x3: [1.0, self.g0[0], self.g0[1]], + } + } + } +} + +impl Ln for ppga2d::Translator { + type Output = ppga2d::IdealPoint; + + fn ln(self) -> ppga2d::IdealPoint { + ppga2d::IdealPoint { + g0: simd::Simd32x2 { + f32x2: [self.g0[1] / self.g0[0], self.g0[2] / self.g0[0]], + } + } + } +} + +impl Powf for ppga2d::Translator { + type Output = Self; + + fn powf(self, exponent: f32) -> Self { + (ppga2d::Scalar { g0: exponent } * self.ln()).exp() + } +} impl Exp for ppga2d::Point { type Output = ppga2d::Motor; From db995f985adc9e9a77da8f43236f15b1a5034689 Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Sun, 9 Oct 2022 12:53:29 +0200 Subject: [PATCH 4/4] Add ideal point type --- .github/workflows/actions.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/actions.yaml b/.github/workflows/actions.yaml index a041669..647759e 100644 --- a/.github/workflows/actions.yaml +++ b/.github/workflows/actions.yaml @@ -30,7 +30,7 @@ jobs: - name: epga2d descriptor: "epga2d:1,1,1;Scalar:1;MultiVector:1,e12,e1,e2|e0,e012,e01,-e02;Rotor:1,e12;Point:e12,e01,-e02;Plane:e0,e2,e1;Translator:1,e01,-e02;Motor:1,e12,e01,-e02;MotorDual:e012,e0,e2,e1" - name: ppga2d - descriptor: "ppga2d:0,1,1;Scalar:1;MultiVector:1,e12,e1,e2|e0,e012,e01,-e02;Rotor:1,e12;Point:e12,e01,-e02;Plane:e0,e2,e1;Translator:1,e01,-e02;Motor:1,e12,e01,-e02;MotorDual:e012,e0,e2,e1" + descriptor: "ppga2d:0,1,1;Scalar:1;MultiVector:1,e12,e1,e2|e0,e012,e01,-e02;Rotor:1,e12;Point:e12,e01,-e02;IdealPoint:e01,-e02;Plane:e0,e2,e1;Translator:1,e01,-e02;Motor:1,e12,e01,-e02;MotorDual:e012,e0,e2,e1" - name: hpga2d descriptor: "hpga2d:-1,1,1;Scalar:1;MultiVector:1,e12,e1,e2|e0,e012,e01,-e02;Rotor:1,e12;Point:e12,e01,-e02;Plane:e0,e2,e1;Translator:1,e01,-e02;Motor:1,e12,e01,-e02;MotorDual:e012,e0,e2,e1" - name: epga3d