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,
                           GaSymMultivector.CreateScalar(
                               mvType.ParentFrame.GaSpaceDimension,
                               scalarValue
                               )
                           ));
            }

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

                return(GMacValueMultivector.Create(
                           mvType,
                           GaSymMultivector.CreateCopy(mvValue.SymbolicMultivector)
                           ));
            }

            throw new InvalidOperationException("Invalid cast operation");
        }
Esempio n. 2
0
        public IEnumerable <GaSymMultivector> GetSymIntegerLidVectors(int gaSpaceDim, int count, int minValue, int maxValue)
        {
            var vSpaceDim = gaSpaceDim.ToVSpaceDimension();

            if (count < 1 || count > vSpaceDim)
            {
                yield break;
            }

            var mv = GaSymMultivector.CreateScalar(gaSpaceDim, Expr.INT_ONE);

            while (count > 0)
            {
                var v   = GetSymIntegerVector(gaSpaceDim, minValue, maxValue);
                var mv1 = mv.Op(v);

                if (mv1.IsZero())
                {
                    continue;
                }

                mv = mv1;
                count--;

                yield return(v);
            }
        }
Esempio n. 3
0
        public override GaSymMultivector BasisBladeSignature(int id)
        {
            if (id >= 0 && id < GaSpaceDimension)
            {
                return(GaSymMultivector.CreateScalar(GaSpaceDimension, CasConstants.One));
            }

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

            return(GaSymMultivector.CreateScalar(
                       GaSpaceDimension,
                       OrthonormalMetric[id] < 0
                    ? CasConstants.MinusOne
                    : CasConstants.One
                       ));
        }
Esempio n. 5
0
        internal static GMacValueMultivector CreateScalar(GMacFrameMultivector mvType, MathematicaScalar coef)
        {
            var mvCoefs = GaSymMultivector.CreateScalar(mvType.ParentFrame.GaSpaceDimension, coef);

            return(new GMacValueMultivector(mvType, mvCoefs));
        }
Esempio n. 6
0
 public override GaSymMultivector BasisBladeSignature(int id)
 {
     return(GaSymMultivector.CreateScalar(GaSpaceDimension, OrthogonalMetric[id]));
 }