Example #1
0
        /// <summary>
        /// Create a derived frame system using a change of basis matrix for the basis vectors
        /// </summary>
        /// <param name="baseFrame">The base frame. It may be any kind of frame</param>
        /// <param name="cbm">The 'Change Of Basis Vectors' matrix. It must be invertable</param>
        /// <returns></returns>
        public static GaSymMetricNonOrthogonal CreateDerivedCbmFrameSystem(GaSymFrame baseFrame, MathematicaMatrix cbm)
        {
            var baseIpm         = baseFrame.Ipm.ToMathematicaMatrix();
            var cbmTrans        = (MathematicaMatrix)cbm.Transpose();
            var cbmInverseTrans = (MathematicaMatrix)cbmTrans.Inverse();

            var ipm = cbm * baseIpm * cbmTrans;

            var baseToDerivedCba = cbmInverseTrans.ToOutermorphismTree();
            var derivedToBaseCba = cbmTrans.ToOutermorphismTree();

            if (ipm.IsDiagonal())
            {
                var derivedFrame = CreateOrthogonal(ipm.GetDiagonal());
                return(new GaSymMetricNonOrthogonal(baseFrame, derivedFrame, derivedToBaseCba, baseToDerivedCba));
            }

            if (baseFrame.IsOrthogonal)
            {
                var derivedFrame = new GaSymFrameNonOrthogonal(baseFrame, ipm, derivedToBaseCba, baseToDerivedCba);
                return(derivedFrame.NonOrthogonalMetric);
            }

            var gaFrame =
                //new GaFrameNonOrthogonal(baseFrame, ipm, derivedToBaseOm, baseToDerivedOm);
                CreateNonOrthogonalFromIpm(ipm.ToMathematicaMatrix());

            return(gaFrame.NonOrthogonalMetric);
            //return new DerivedFrameSystem(baseFrame, gaFrame, derivedToBaseOm, baseToDerivedOm);
        }
Example #2
0
        /// <summary>
        /// Create a derived frame system using a change of basis matrix for the basis vectors
        /// </summary>
        /// <param name="baseFrame">The base frame. It may be any kind of frame</param>
        /// <param name="cbm">The 'Change Of Basis Vectors' matrix. It must be invertable</param>
        /// <returns></returns>
        public static DerivedFrameSystem CreateDerivedCbmFrameSystem(GaFrame baseFrame, MathematicaMatrix cbm)
        {
            var baseIpm         = baseFrame.Ipm.ToMathematicaMatrix();
            var cbmTrans        = (MathematicaMatrix)cbm.Transpose();
            var cbmInverseTrans = (MathematicaMatrix)cbmTrans.Inverse();

            var ipm = cbm * baseIpm * cbmTrans;

            var baseToDerivedOm = GaOuterMorphismFull.Create(cbmInverseTrans);
            var derivedToBaseOm = GaOuterMorphismFull.Create(cbmTrans);

            if (ipm.IsDiagonal())
            {
                var derivedFrame = CreateOrthogonal(ipm.GetDiagonal());
                return(new DerivedFrameSystem(baseFrame, derivedFrame, derivedToBaseOm, baseToDerivedOm));
            }

            if (baseFrame.IsOrthogonal)
            {
                var derivedFrame = new GaFrameNonOrthogonal(baseFrame, ipm, derivedToBaseOm, baseToDerivedOm);
                return(derivedFrame.Dfs);
            }

            var gaFrame =
                //new GaFrameNonOrthogonal(baseFrame, ipm, derivedToBaseOm, baseToDerivedOm);
                CreateNonOrthogonalFromIpm(ipm.ToMathematicaMatrix());

            return(gaFrame.Dfs);
            //return new DerivedFrameSystem(baseFrame, gaFrame, derivedToBaseOm, baseToDerivedOm);
        }