Merge pull request #2 from Jim-Eckerlein/feature/exp_ln_translator
Implement exponential map for translator
This commit is contained in:
commit
188b0f557b
2 changed files with 65 additions and 2 deletions
4
.github/workflows/actions.yaml
vendored
4
.github/workflows/actions.yaml
vendored
|
|
@ -30,13 +30,13 @@ jobs:
|
||||||
- name: epga2d
|
- 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"
|
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
|
- 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
|
- 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"
|
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
|
- 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"
|
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
|
- 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;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
|
- 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"
|
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:
|
steps:
|
||||||
|
|
|
||||||
63
src/lib.rs
63
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 {
|
impl Exp for ppga2d::Point {
|
||||||
type Output = ppga2d::Motor;
|
type Output = ppga2d::Motor;
|
||||||
|
|
||||||
|
|
@ -206,6 +237,38 @@ impl Powf for ppga3d::Motor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Exp for ppga3d::IdealLine {
|
||||||
|
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::IdealLine;
|
||||||
|
|
||||||
|
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]],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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`
|
/// All elements set to `0.0`
|
||||||
pub trait Zero {
|
pub trait Zero {
|
||||||
fn zero() -> Self;
|
fn zero() -> Self;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue