private static string EuclideanBilinearProductTable(int[] basisBladeIds, Func <int, int, bool> isZeroFunc)
        {
            var composer = new TableComposer(basisBladeIds.Length, basisBladeIds.Length);

            for (var r = 0; r < basisBladeIds.Length; r++)
            {
                var id1 = basisBladeIds[r];
                composer.ColumnsInfo[r].Header = id1.BasisBladeName();
                composer.RowsInfo[r].Header    = id1.BasisBladeName();

                for (var c = 0; c < basisBladeIds.Length; c++)
                {
                    var id2 = basisBladeIds[c];

                    //var isNegative = MultivectorUtils.ComputeIsNegativeEGp(id1, id2);
                    var isNegative = FrameUtils.IsNegativeEGp(id1, id2);

                    var name = isZeroFunc(id1, id2)
                        ? "0"
                        : ((isNegative ? "-" : "") + (id1 ^ id2).BasisBladeName());

                    composer.Items[r, c] = name;
                }
            }

            return(composer.ToString());
        }
示例#2
0
        public override string ToString()
        {
            var tableText     = new TableComposer(TargetGaSpaceDimension, TargetGaSpaceDimension);
            var basisBladeIds = GMacMathUtils.BasisBladeIDs(TargetVSpaceDimension).ToArray();

            foreach (var basisBladeId in basisBladeIds)
            {
                tableText.ColumnsInfo[basisBladeId].Header = basisBladeId.BasisBladeName();
                tableText.RowsInfo[basisBladeId].Header    = basisBladeId.BasisBladeName();
            }

            for (var basisBladeId1 = 0; basisBladeId1 < TargetGaSpaceDimension; basisBladeId1++)
            {
                for (var basisBladeId2 = 0; basisBladeId2 < TargetGaSpaceDimension; basisBladeId2++)
                {
                    var mv = _basisBladesMaps[basisBladeId1, basisBladeId2];
                    if (mv != null)
                    {
                        tableText.Items[basisBladeId1, basisBladeId2] = mv.ToString();
                    }
                }
            }

            var text = tableText.ToString();

            return(text);
        }
        private static string InvolutionTables(int[] basisBladeIds)
        {
            var composer = new TableComposer(basisBladeIds.Length, 3);

            composer.ColumnsInfo[0].Header = "Reverse";
            composer.ColumnsInfo[1].Header = "Grade Involution";
            composer.ColumnsInfo[2].Header = "Clifford Conjugate";

            for (var r = 0; r < basisBladeIds.Length; r++)
            {
                var id = basisBladeIds[r];

                composer.RowsInfo[r].Header = id.BasisBladeName();

                composer.Items[r, 0] = id.BasisBladeIdHasNegativeReverse() ? "-1" : "+1";
                composer.Items[r, 1] = id.BasisBladeIdHasNegativeGradeInv() ? "-1" : "+1";
                composer.Items[r, 2] = id.BasisBladeIdHasNegativeClifConj() ? "-1" : "+1";
            }

            return(composer.ToString());
        }
示例#4
0
        public override string ToString()
        {
            var tableText     = new TableComposer(TargetGaSpaceDimension, TargetGaSpaceDimension);
            var basisBladeIds = GMacMathUtils.BasisBladeIDs(TargetVSpaceDimension).ToArray();

            foreach (var basisBladeId in basisBladeIds)
            {
                tableText.ColumnsInfo[basisBladeId].Header = basisBladeId.BasisBladeName();
                tableText.RowsInfo[basisBladeId].Header    = basisBladeId.BasisBladeName();
            }

            foreach (var pair in _basisBladesMaps)
            {
                tableText.Items[pair.Item1, pair.Item2] =
                    pair.Item3.ToString();
            }

            var text = tableText.ToString();

            return(text);
        }