Esempio n. 1
0
        /// <summary>
        /// Evaluate a cast to multivector value operation
        /// </summary>
        /// <param name="expr"></param>
        /// <returns></returns>
        private ILanguageValue EvaluateBasicUnaryCastToMultivector(BasicUnary expr)
        {
            var value1 = expr.Operand.AcceptVisitor(this);

            var mvType = (GMacFrameMultivector)expr.Operator;

            if (value1.ExpressionType.IsNumber())
            {
                var scalarValue = ((ValuePrimitive <MathematicaScalar>)value1).Value;

                return(GMacValueMultivector.Create(
                           mvType,
                           GaMultivector.CreateScalar(
                               mvType.ParentFrame.GaSpaceDimension,
                               scalarValue
                               )
                           ));
            }

            if (value1.ExpressionType.IsFrameMultivector() &&
                value1.ExpressionType.GetFrame().VSpaceDimension == mvType.ParentFrame.VSpaceDimension)
            {
                var mvValue = (GMacValueMultivector)value1;

                return(GMacValueMultivector.Create(
                           mvType,
                           GaMultivector.CreateCopy(mvValue.MultivectorCoefficients)
                           ));
            }

            throw new InvalidOperationException("Invalid cast operation");
        }
Esempio n. 2
0
        public static GaOuterMorphismFull Create(ISymbolicMatrix vectorTransformMatrix)
        {
            var domainGaSpaceDim   = FrameUtils.GaSpaceDimension(vectorTransformMatrix.Columns);
            var codomainGaSpaceDim = FrameUtils.GaSpaceDimension(vectorTransformMatrix.Rows);

            var transformedBasisBlades = new GaMultivector[domainGaSpaceDim];

            transformedBasisBlades[0] = GaMultivector.CreateScalar(codomainGaSpaceDim, MathematicaScalar.Create(vectorTransformMatrix.CasInterface, 1));

            for (var id = 1; id <= domainGaSpaceDim - 1; id++)
            {
                if (id.IsValidBasisVectorId())
                {
                    transformedBasisBlades[id] = CreateFromMatrixColumn(vectorTransformMatrix, id.BasisBladeIndex());
                }
                else
                {
                    int id1, id2;
                    id.SplitBySmallestBasicPattern(out id1, out id2);

                    transformedBasisBlades[id] = transformedBasisBlades[id1].OuterProduct(transformedBasisBlades[id2]);
                }
            }

            return(new GaOuterMorphismFull(transformedBasisBlades));
        }
Esempio n. 3
0
        public override GaMultivector BasisBladeSignature(int id)
        {
            if (id >= 0 && id < GaSpaceDimension)
            {
                return(GaMultivector.CreateScalar(GaSpaceDimension, CasConstants.One));
            }

            throw new IndexOutOfRangeException();
        }
Esempio n. 4
0
        public override GaMultivector BasisBladeSignature(int id)
        {
            if (id < 0 || id >= GaSpaceDimension)
            {
                throw new IndexOutOfRangeException();
            }

            var s = _basisBladesSignatures[id] == 1 ? CasConstants.One : CasConstants.MinusOne;

            GaMultivector.CreateScalar(GaSpaceDimension, s);

            throw new IndexOutOfRangeException();
        }
Esempio n. 5
0
 public override GaMultivector BasisBladeSignature(int id)
 {
     return(GaMultivector.CreateScalar(GaSpaceDimension, _basisBladesSignatures[id]));
 }
Esempio n. 6
0
        internal static GMacValueMultivector CreateScalar(GMacFrameMultivector mvType, MathematicaScalar coef)
        {
            var mvCoefs = GaMultivector.CreateScalar(mvType.ParentFrame.GaSpaceDimension, coef);

            return(new GMacValueMultivector(mvType, mvCoefs));
        }