Пример #1
0
        public override void writeToXml(XmlTextWriter writer)
        {
            JamaMatrix jamaMatrix = IPolyPointTransformer.PolyExps(this.polynomialDegree);

            string[] array = new string[]
            {
                "x",
                "y"
            };
            for (int i = 0; i < 2; i++)
            {
                writer.WriteStartElement("Sum");
                writer.WriteAttributeString("Name", array[i]);
                for (int j = 0; j < jamaMatrix.RowDimension; j++)
                {
                    writer.WriteStartElement("Term");
                    writer.WriteAttributeString("Coefficient", this.transformCoefficients.GetElement(i * jamaMatrix.RowDimension + j, 0).ToString(CultureInfo.InvariantCulture));
                    for (int k = 0; k < 2; k++)
                    {
                        writer.WriteAttributeString(array[k] + "_power", jamaMatrix.GetElement(j, k).ToString(CultureInfo.InvariantCulture));
                    }
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
        }
        public override void doTransform(PointD p0, PointD p1)
        {
            JamaMatrix jamaMatrix = new JamaMatrix(1, 2);

            jamaMatrix.SetElement(0, 0, p0.x);
            jamaMatrix.SetElement(0, 1, p0.y);
            JamaMatrix jamaMatrix2 = IPolyPointTransformer.Polynomialize(jamaMatrix, this.polynomialDegree).times(this.matrix);

            p1.x = jamaMatrix2.GetElement(0, 0);
            p1.y = jamaMatrix2.GetElement(1, 0);
        }
Пример #3
0
        private static IPolyPointTransformer getPolyPointTransformer(JamaMatrix sourcePoints, JamaMatrix destPoints, int polynomialDegree)
        {
            JamaMatrix am     = IPolyPointTransformer.Polynomialize(destPoints, polynomialDegree);
            JamaMatrix matrix = PolynomialImageTransformer.SVDSolveApply(am, PolynomialImageTransformer.PointUnroll(sourcePoints));

            switch (polynomialDegree)
            {
            case 1:
                return(new FastPoly1PointTransformer(matrix));

            case 2:
                return(new FastPoly2PointTransformer(matrix));

            default:
                return(new SlowGeneralPolyPointTransformer(polynomialDegree, matrix));
            }
        }
Пример #4
0
        public static JamaMatrix Polynomialize(JamaMatrix values, int degree)
        {
            JamaMatrix jamaMatrix  = IPolyPointTransformer.PolyExps(degree);
            JamaMatrix jamaMatrix2 = new JamaMatrix(values.RowDimension, jamaMatrix.RowDimension);

            for (int i = 0; i < jamaMatrix.RowDimension; i++)
            {
                for (int j = 0; j < values.RowDimension; j++)
                {
                    jamaMatrix2.SetElement(j, i, Math.Pow(values.GetElement(j, 0), jamaMatrix.GetElement(i, 0)) * Math.Pow(values.GetElement(j, 1), jamaMatrix.GetElement(i, 1)));
                }
            }
            JamaMatrix jamaMatrix3 = new JamaMatrix(jamaMatrix2.RowDimension * 2, jamaMatrix2.ColumnDimension * 2);

            jamaMatrix3.setMatrix(0, jamaMatrix2.RowDimension - 1, 0, jamaMatrix2.ColumnDimension - 1, jamaMatrix2);
            jamaMatrix3.setMatrix(jamaMatrix2.RowDimension, 2 * jamaMatrix2.RowDimension - 1, jamaMatrix2.ColumnDimension, 2 * jamaMatrix2.ColumnDimension - 1, jamaMatrix2);
            return(jamaMatrix3);
        }
Пример #5
0
        public static void TestFunc()
        {
            double[][] array    = new double[4][];
            double[][] arg_15_0 = array;
            int        arg_15_1 = 0;

            double[] array2 = new double[2];
            arg_15_0[arg_15_1] = array2;
            array[1]           = new double[]
            {
                1.02,
                0.93
            };
            array[2] = new double[]
            {
                0.0,
                1.0
            };
            double[][] arg_73_0 = array;
            int        arg_73_1 = 3;

            double[] array3 = new double[2];
            array3[0]          = 1.0;
            arg_73_0[arg_73_1] = array3;
            double[][] a          = array;
            JamaMatrix jamaMatrix = new JamaMatrix(a);

            PolynomialImageTransformer.RegularUnitGrid(4);
            JamaMatrix jamaMatrix2 = (JamaMatrix)jamaMatrix.Clone();

            jamaMatrix2.SetElement(1, 0, 1.0);
            jamaMatrix2.SetElement(1, 1, 1.0);
            JamaMatrix jamaMatrix3 = IPolyPointTransformer.Polynomialize(jamaMatrix, 2);
            JamaMatrix jamaMatrix4 = PolynomialImageTransformer.SVDSolveApply(jamaMatrix3, PolynomialImageTransformer.PointUnroll(jamaMatrix2));

            D.Say(0, "polyTransform:\n" + jamaMatrix4.ToString());
            JamaMatrix unrolledVector = jamaMatrix3.times(jamaMatrix4);

            D.Say(0, "testSolution:\n" + PolynomialImageTransformer.PointRoll(unrolledVector, 2).ToString());
            PolynomialImageTransformer.getPolyPointTransformer(jamaMatrix, jamaMatrix2, 2);
            LatLon p = new LatLon(0.93, 1.02);

            D.Say(0, "Invert test:\n" + PolynomialImageTransformer.getApproximateInverterPolyPointTransformer(jamaMatrix, jamaMatrix2, 2).getTransformedPoint(p).ToString());
        }