protected override void ComputeUnitPseudoScalarCoef() { InnerUnitPseudoScalarCoef = (_basisBladesSignatures[MaxBasisBladeId] == 1) == !MaxBasisBladeId.BasisBladeIdHasNegativeReverse() ? CasConstants.One : CasConstants.MinusOne; }
protected override void ComputeUnitPseudoScalarCoef() { if (MaxBasisBladeId.BasisBladeIdHasNegativeReverse()) { InnerUnitPseudoScalarCoef = CasConstants.MinusOne / _basisBladesSignatures[MaxBasisBladeId]; } else { InnerUnitPseudoScalarCoef = CasConstants.One / _basisBladesSignatures[MaxBasisBladeId]; } }
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]; }
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(); }
/// <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] ); }
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]; }