示例#1
0
 protected override void ComputeUnitPseudoScalarCoef()
 {
     InnerUnitPseudoScalarCoef =
         (_basisBladesSignatures[MaxBasisBladeId] == 1) == !MaxBasisBladeId.BasisBladeIdHasNegativeReverse()
         ? CasConstants.One
         : CasConstants.MinusOne;
 }
示例#2
0
        protected override void ComputeUnitPseudoScalarCoef()
        {
            if (MaxBasisBladeId.BasisBladeIdHasNegativeReverse())
            {
                InnerUnitPseudoScalarCoef = CasConstants.MinusOne / _basisBladesSignatures[MaxBasisBladeId];
            }

            else
            {
                InnerUnitPseudoScalarCoef = CasConstants.One / _basisBladesSignatures[MaxBasisBladeId];
            }
        }
示例#3
0
        internal GaNumFrameOrthogonal(IEnumerable <double> basisVectorsSignaturesList)
        {
            BasisVectorsSignatures = basisVectorsSignaturesList.ToArray();

            OrthogonalMetric = GaNumMetricOrthogonal.Create(BasisVectorsSignatures);

            Op  = ComputedOp = new GaNumOp(VSpaceDimension);
            Gp  = ComputedGp = new GaNumOrthogonalGp(OrthogonalMetric);
            Sp  = ComputedSp = new GaNumOrthogonalSp(OrthogonalMetric);
            Lcp = ComputedLcp = new GaNumOrthogonalLcp(OrthogonalMetric);
            Rcp = ComputedRcp = new GaNumOrthogonalRcp(OrthogonalMetric);
            Fdp = ComputedFdp = new GaNumOrthogonalFdp(OrthogonalMetric);
            Hip = ComputedHip = new GaNumOrthogonalHip(OrthogonalMetric);
            Acp = ComputedAcp = new GaNumOrthogonalAcp(OrthogonalMetric);
            Cp  = ComputedCp = new GaNumOrthogonalCp(OrthogonalMetric);

            UnitPseudoScalarCoef =
                (MaxBasisBladeId.BasisBladeIdHasNegativeReverse() ? -1.0d : 1.0d) /
                OrthogonalMetric[MaxBasisBladeId];
        }
示例#4
0
        internal GaSymFrameOrthogonal(IEnumerable <MathematicaScalar> basisVectorsSignaturesList)
        {
            BasisVectorsSignatures = basisVectorsSignaturesList.ToArray();

            OrthogonalMetric = GaSymMetricOrthogonal.Create(BasisVectorsSignatures);

            Op  = ComputedOp = new GaSymOp(VSpaceDimension);
            Gp  = ComputedGp = new GaSymOrthogonalGp(OrthogonalMetric);
            Sp  = ComputedSp = new GaSymOrthogonalSp(OrthogonalMetric);
            Lcp = ComputedLcp = new GaSymOrthogonalLcp(OrthogonalMetric);
            Rcp = ComputedRcp = new GaSymOrthogonalRcp(OrthogonalMetric);
            Fdp = ComputedFdp = new GaSymOrthogonalFdp(OrthogonalMetric);
            Hip = ComputedHip = new GaSymOrthogonalHip(OrthogonalMetric);
            Acp = ComputedAcp = new GaSymOrthogonalAcp(OrthogonalMetric);
            Cp  = ComputedCp = new GaSymOrthogonalCp(OrthogonalMetric);

            UnitPseudoScalarCoef = (
                MaxBasisBladeId.BasisBladeIdHasNegativeReverse()
                    ? CasConstants.MinusOne
                    : CasConstants.One
                ) / OrthogonalMetric.GetSignature(MaxBasisBladeId);
        }
        internal GaSymFrameNonOrthogonal(GaSymFrame baseOrthoFrame, ISymbolicMatrix ipm, GaSymOutermorphism derivedToBaseOm, GaSymOutermorphism baseToDerivedOm)
        {
            if (baseOrthoFrame.IsOrthogonal == false)
            {
                throw new GMacSymbolicException("Base frame must be orthogonal");
            }

            if (ipm.IsSymmetric() == false || ipm.IsDiagonal())
            {
                throw new GMacSymbolicException("Inner product matrix must be symmetric and non-diagonal");
            }

            InnerProductMatrix = ipm.ToMathematicaMatrix();

            NonOrthogonalMetric =
                new GaSymMetricNonOrthogonal(
                    baseOrthoFrame,
                    this,
                    derivedToBaseOm,
                    baseToDerivedOm
                    );

            Op  = ComputedOp = new GaSymOp(VSpaceDimension);
            Gp  = ComputedGp = GaSymBilinearProductCba.CreateGp(NonOrthogonalMetric);
            Sp  = ComputedSp = GaSymBilinearProductCba.CreateSp(NonOrthogonalMetric);
            Lcp = ComputedLcp = GaSymBilinearProductCba.CreateLcp(NonOrthogonalMetric);
            Rcp = ComputedRcp = GaSymBilinearProductCba.CreateRcp(NonOrthogonalMetric);
            Fdp = ComputedFdp = GaSymBilinearProductCba.CreateFdp(NonOrthogonalMetric);
            Hip = ComputedHip = GaSymBilinearProductCba.CreateHip(NonOrthogonalMetric);
            Acp = ComputedAcp = GaSymBilinearProductCba.CreateAcp(NonOrthogonalMetric);
            Cp  = ComputedCp = GaSymBilinearProductCba.CreateCp(NonOrthogonalMetric);

            UnitPseudoScalarCoef =
                MaxBasisBladeId.BasisBladeIdHasNegativeReverse()
                    ? CasConstants.MinusOne / BasisBladeSignature(MaxBasisBladeId)[0].ToMathematicaScalar()
                    : CasConstants.One / BasisBladeSignature(MaxBasisBladeId)[0].ToMathematicaScalar();
        }
示例#6
0
        /// <summary>
        /// frameSigList must have all items equal to 1 (false) or -1 (true) with at least one negative item
        /// </summary>
        /// <param name="frameSigList"></param>
        internal GaSymFrameOrthonormal(IEnumerable <bool> frameSigList)
        {
            BasisVectorsSignatures = frameSigList.Select(b => b ? -1 : 1).ToArray();

            OrthonormalMetric = GaSymMetricOrthonormal.Create(BasisVectorsSignatures);

            Op  = ComputedOp = new GaSymOp(VSpaceDimension);
            Gp  = ComputedGp = new GaSymOrthonormalGp(OrthonormalMetric);
            Sp  = ComputedSp = new GaSymOrthonormalSp(OrthonormalMetric);
            Lcp = ComputedLcp = new GaSymOrthonormalLcp(OrthonormalMetric);
            Rcp = ComputedRcp = new GaSymOrthonormalRcp(OrthonormalMetric);
            Fdp = ComputedFdp = new GaSymOrthonormalFdp(OrthonormalMetric);
            Hip = ComputedHip = new GaSymOrthonormalHip(OrthonormalMetric);
            Acp = ComputedAcp = new GaSymOrthonormalAcp(OrthonormalMetric);
            Cp  = ComputedCp = new GaSymOrthonormalCp(OrthonormalMetric);

            UnitPseudoScalarCoef =
                MathematicaScalar.Create(
                    SymbolicUtils.Cas,
                    MaxBasisBladeId.BasisBladeIdHasNegativeReverse()
                        ? -1.0d / OrthonormalMetric[MaxBasisBladeId]
                        : 1.0d / OrthonormalMetric[MaxBasisBladeId]
                    );
        }
示例#7
0
        internal GaNumFrameNonOrthogonal(GaNumFrame baseOrthoFrame, Matrix ipm, GaNumOutermorphism derivedToBaseOm, GaNumOutermorphism baseToDerivedOm)
        {
            if (baseOrthoFrame.IsOrthogonal == false)
            {
                throw new GMacNumericException("Base frame must be orthogonal");
            }

            if (ipm.IsDiagonal())
            {
                throw new GMacNumericException("Inner product matrix must be non-diagonal");
            }

            InnerProductMatrix = ipm;

            NonOrthogonalMetric =
                new GaNumMetricNonOrthogonal(
                    baseOrthoFrame,
                    this,
                    derivedToBaseOm,
                    baseToDerivedOm
                    );

            Op  = ComputedOp = new GaNumOp(VSpaceDimension);
            Gp  = ComputedGp = GaNumBilinearProductCba.CreateGp(NonOrthogonalMetric);
            Sp  = ComputedSp = GaNumBilinearProductCba.CreateSp(NonOrthogonalMetric);
            Lcp = ComputedLcp = GaNumBilinearProductCba.CreateLcp(NonOrthogonalMetric);
            Rcp = ComputedRcp = GaNumBilinearProductCba.CreateRcp(NonOrthogonalMetric);
            Fdp = ComputedFdp = GaNumBilinearProductCba.CreateFdp(NonOrthogonalMetric);
            Hip = ComputedHip = GaNumBilinearProductCba.CreateHip(NonOrthogonalMetric);
            Acp = ComputedAcp = GaNumBilinearProductCba.CreateAcp(NonOrthogonalMetric);
            Cp  = ComputedCp = GaNumBilinearProductCba.CreateCp(NonOrthogonalMetric);

            UnitPseudoScalarCoef =
                (MaxBasisBladeId.BasisBladeIdHasNegativeReverse() ? -1.0d : 1.0d) /
                BasisBladeSignature(MaxBasisBladeId)[0];
        }