public override IEnumerable <Tuple <int, IGaNumMultivector> > BasisBladeMaps() { return(Enumerable.Range(0, TargetGaSpaceDimension) .Select(id => new Tuple <int, IGaNumMultivector>( id, GaNumMultivector.CreateBasisBlade(TargetGaSpaceDimension, id) ))); }
public override GaNumMultivector BasisBladeSignature(int id) { var basisBlade = GaNumMultivector.CreateBasisBlade(GaSpaceDimension, id); var sig = Gp[basisBlade, basisBlade]; return(id.BasisBladeIdHasNegativeReverse() ? -sig : sig); }
public IEnumerable <GaNumMultivector> RotorProduct(GaNumMultivector rotorVersor, IEnumerable <int> basisBladeIDs) { var rotorVersorInverse = rotorVersor.Reverse(); return(basisBladeIDs.Select(id => { var mv = GaNumMultivector.CreateBasisBlade(GaSpaceDimension, id); return Gp[Gp[rotorVersor, mv], rotorVersorInverse] .GetKVectorPart(id.BasisBladeGrade()); })); }
public IEnumerable <GaNumMultivector> EvenVersorProduct(GaNumMultivector evenVersor, IEnumerable <int> basisBladeIDs) { var evenVersorReverse = evenVersor.Reverse(); var evenVersorNorm2Inverse = 1.0d / Sp[evenVersor, evenVersorReverse][0]; var evenVersorInverse = evenVersorReverse * evenVersorNorm2Inverse; return(basisBladeIDs.Select(id => { var mv = GaNumMultivector.CreateBasisBlade(GaSpaceDimension, id); return Gp[Gp[evenVersor, mv], evenVersorInverse] .GetKVectorPart(id.BasisBladeGrade()); })); }
public override IGaNumMultivector this[int id1] => GaNumMultivector.CreateBasisBlade(TargetGaSpaceDimension, id1);
public GaNumMultivector CreateUnitPseudoScalar() { return(GaNumMultivector.CreateBasisBlade(GaSpaceDimension, MaxBasisBladeId)); }