public Matriz GenerateMatrixCross(int order, int num, List<Kpoint> data) { int matrixSize = SerieCoef(order).Length; Matriz matrix = new Matriz(matrixSize); Matriz ZMatrix = new Matriz(matrixSize, 1); double width = extent[2] - extent[0]; double height = extent[3] - extent[1]; double difZ = extentZ[1] - extentZ[0]; for (int v = 0; v < num; v++) { double x = (data[v].X - extent[0]) / width; double y = (data[v].Y - extent[1]) / height; double z = data[v].W; for (int row = 0; row < matrixSize; row++) { for (int col = 0; col < matrixSize; col++) { matrix[row + 1, col + 1] = matrix[row + 1, col + 1] + Seq(num, order, col, row, x, y); } ZMatrix[row + 1, 1] = ZMatrix[row + 1, 1] + Seq(num, order, row, 0, x, y, z); } } Matriz inver = matrix.Inverse(); Matriz ind = matrix * inver; Matriz result = inver * ZMatrix; return result; }
public void GenerateMatrix(int order, int num, double[,] data) { int matrixSize = SerieCoef(order).Length; Matriz matrix = new Matriz(matrixSize); Matriz ZMatrix = new Matriz(matrixSize, 1); double width = this.extent[2] - this.extent[0]; double height = this.extent[3] - this.extent[1]; double difZ = this.extentZ[1] - this.extentZ[0]; for (int v = 0; v < num; v++) { double x = (data[v, 0] - extent[0])/width; double y = (data[v, 1] - extent[1])/height; double z = data[v, 2]; for (int row = 0; row < matrixSize; row++) { for (int col = 0; col < matrixSize; col++) { matrix[row + 1, col + 1] = matrix[row + 1, col + 1] + Seq(num, order, col, row, x, y); } ZMatrix[row + 1, 1] = ZMatrix[row + 1, 1] + Seq(num, order, row, 0, x, y, z); } } Matriz inver = matrix.Inverse(); Matriz ind = matrix * inver; result = inver * ZMatrix; }