private void LinearProcedure_CheckAllCalculations_ValidRotMatrixDeltaVectorM() { FillListsCoordinationData(PathToTxt, out var srcList, out var dstList); var rotMatrixActual = ReadControlDataFromFile(PathToTxt + "\\rotationMatrixWithoutM.txt", 3, 3); var deltaVectorActual = ReadControlDataFromFile(PathToTxt + "\\resultDeltaVector.txt", 3, 1).Column(0); var mActual = -0.00000290935921; var lp = new LinearProcedure(srcList, dstList); var rotMatrixExpected = lp.RotationMatrix; var deltaVectorExpected = lp.DeltaCoordinateMatrix; for (int row = 0; row < rotMatrixExpected.Matrix.RowCount; row++) { for (int col = 0; col < rotMatrixExpected.Matrix.ColumnCount; col++) { Assert.Equal(rotMatrixActual[row, col], rotMatrixExpected.Matrix[row, col], 8); } } for (int row = 0; row < deltaVectorExpected.Vector.Count; row++) { Assert.Equal(deltaVectorActual[row], deltaVectorExpected.Vector[row], 8); } Assert.Equal(mActual, lp.M, 9); }
private void CalculateParameters(object sender, RoutedEventArgs e) { if (_sourcePoints.Count == 0) { MessageBox.Show("Список исходных координат не может быть меньше 0", "Ошибка выполнения", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (_destinationPoints.Count == 0) { MessageBox.Show("Список конечных координат не может быть меньше 0", "Ошибка выполнения", MessageBoxButton.OK, MessageBoxImage.Error); return; } var srcSc = new SystemCoordinate(_sourcePoints); var dstSc = new SystemCoordinate(_destinationPoints); var nip = new NewtonIterationProcess(srcSc, dstSc); NipParams.ItemsSource = FillParamsList(nip); var a9 = new NineAffine(srcSc, dstSc); A9Params.ItemsSource = FillParamsList(a9); var lp = new LinearProcedure(srcSc, dstSc); LpParams.ItemsSource = FillParamsList(lp); var svd = new SingularValueDecomposition(srcSc, dstSc); SvdParams.ItemsSource = FillParamsList(svd); var nipHelmert = new Helmert(srcSc).FromSourceToDestinationByParameters(nip.DeltaCoordinateMatrix, nip.RotationMatrix, nip.M).GetSubtractList(dstSc); NipDataGrid.ItemsSource = RoundList(nipHelmert); var a9Helmert = new Helmert(srcSc).FromSourceToDestinationByParameters(a9.DeltaCoordinateMatrix, a9.RotationMatrix, a9.M).GetSubtractList(dstSc); A9DataGrid.ItemsSource = RoundList(a9Helmert); var lpHelmert = new Helmert(srcSc).FromSourceToDestinationByParameters(lp.DeltaCoordinateMatrix, lp.RotationMatrix, lp.M).GetSubtractList(dstSc); LinearDataGrid.ItemsSource = RoundList(lpHelmert); var svdHelmert = new Helmert(srcSc).FromSourceToDestinationByParameters(svd.DeltaCoordinateMatrix, svd.RotationMatrix, svd.M).GetSubtractList(dstSc); SvdDataGrid.ItemsSource = RoundList(svdHelmert); }
private void LinearProcedure_FormingLzVector_ValidLzVector() { FillListsCoordinationData(PathToTxt, out var srcList, out var dstList); var lzVectorExpected = ReadControlDataFromFile(PathToTxt + "\\LzMatrix.txt", 10, 1).Column(0); var lp = new LinearProcedure(srcList, dstList); Vector <double> lzVectorActual = lp.FormingLzVectorTst(); Assert.Equal(lzVectorActual.Count, lzVectorExpected.Count); for (int row = 0; row < lzVectorActual.Count; row++) { Assert.Equal(lzVectorActual[row], lzVectorExpected[row], 8); } }
private void LinearProcedure_FormingMatrixQ_ValidMatrixQ() { FillListsCoordinationData(PathToTxt, out var srcList, out var dstList); var qMatrixExpected = ReadControlDataFromFile(PathToTxt + "\\qMatrix.txt", 10, 4); var lp = new LinearProcedure(srcList, dstList); Matrix <double> qMatrixActual = lp.FormingQMatrixTst(); for (int row = 0; row < qMatrixActual.RowCount; row++) { for (int col = 0; col < qMatrixActual.ColumnCount; col++) { Assert.Equal(qMatrixExpected[row, col], qMatrixActual[row, col], 8); } } }
private void LinearProcedure_CalculateDxVector_ValidDxVector() { FillListsCoordinationData(PathToTxt, out var srcList, out var dstList); var dxVectorExpected = ReadControlDataFromFile(PathToTxt + "\\DxVector.txt", 4, 1).Column(0); var lp = new LinearProcedure(srcList, dstList); var qMatrix = lp.FormingQMatrixTst(); var lxVector = lp.FormingLxVectorTst(); Vector <double> dxVectorActual = lp.CalculateDVectorsTst(qMatrix, lxVector); Assert.Equal(dxVectorActual.Count, dxVectorExpected.Count); for (int row = 0; row < dxVectorActual.Count; row++) { Assert.Equal(dxVectorActual[row], dxVectorExpected[row], 8); } }