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); }
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)); } }
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); }
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()); }