/// <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 GaNumFrameOrthonormal(IEnumerable <bool> frameSigList) { BasisVectorsSignatures = frameSigList.Select(b => b ? -1 : 1).ToArray(); OrthonormalMetric = GaNumMetricOrthonormal.Create(BasisVectorsSignatures); Op = ComputedOp = new GaNumOp(VSpaceDimension); Gp = ComputedGp = new GaNumOrthonormalGp(OrthonormalMetric); Sp = ComputedSp = new GaNumOrthonormalSp(OrthonormalMetric); Lcp = ComputedLcp = new GaNumOrthonormalLcp(OrthonormalMetric); Rcp = ComputedRcp = new GaNumOrthonormalRcp(OrthonormalMetric); Fdp = ComputedFdp = new GaNumOrthonormalFdp(OrthonormalMetric); Hip = ComputedHip = new GaNumOrthonormalHip(OrthonormalMetric); Acp = ComputedAcp = new GaNumOrthonormalAcp(OrthonormalMetric); Cp = ComputedCp = new GaNumOrthonormalCp(OrthonormalMetric); UnitPseudoScalarCoef = (MaxBasisBladeId.BasisBladeIdHasNegativeReverse() ? -1.0d : 1.0d) / OrthonormalMetric[MaxBasisBladeId]; }
internal GaNumOrthonormalLcp(GaNumMetricOrthonormal basisBladesSignatures) : base(basisBladesSignatures) { }
public static IGaNumMultivectorTemp AddFactors(this IGaNumMultivectorTemp tempMv, IEnumerable <GaNumMultivectorBiTerm> biTerms, GaNumMetricOrthonormal orthonormalMetric) { foreach (var biTerm in biTerms) { tempMv.AddFactor( biTerm.IdXor, biTerm.IsNegativeEGp, biTerm.ValuesProduct * orthonormalMetric[biTerm.IdAnd] ); } return(tempMv); }
protected GaNumBilinearProductOrthonormal(GaNumMetricOrthonormal basisBladesSignatures) { OrthonormalMetric = basisBladesSignatures; }