예제 #1
0
 public override IEnumerable <Tuple <int, IGaNumMultivector> > BasisBladeMaps()
 {
     return(Enumerable.Range(0, TargetGaSpaceDimension)
            .Select(id => new Tuple <int, IGaNumMultivector>(
                        id,
                        GaNumMultivector.CreateBasisBlade(TargetGaSpaceDimension, id)
                        )));
 }
예제 #2
0
        public override GaNumMultivector BasisBladeSignature(int id)
        {
            var basisBlade = GaNumMultivector.CreateBasisBlade(GaSpaceDimension, id);

            var sig = Gp[basisBlade, basisBlade];

            return(id.BasisBladeIdHasNegativeReverse() ? -sig : sig);
        }
예제 #3
0
        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());
            }));
        }
예제 #4
0
        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());
            }));
        }
예제 #5
0
 public override IGaNumMultivector this[int id1]
 => GaNumMultivector.CreateBasisBlade(TargetGaSpaceDimension, id1);
예제 #6
0
 public GaNumMultivector CreateUnitPseudoScalar()
 {
     return(GaNumMultivector.CreateBasisBlade(GaSpaceDimension, MaxBasisBladeId));
 }