示例#1
0
    private void NineAffine_CalculateDxVector_ValidDxVector()
    {
        FillListsCoordinationData(PathToTxt, out var srcSC, out var dstSC);
        var dxVectorExpected = ReadControlDataFromFile(PathToTxt + "\\dxVector.txt", 9, 1).Column(0);
        var a9Instance       = new NineAffine(srcSC, dstSC);

        var eMatrix   = a9Instance.CreateEMatrixTst();
        var fMatrix   = a9Instance.CreateFMatrixTst();
        var gMatrix   = a9Instance.CreateGMatrixTst();
        var rotMatrix = a9Instance.CalculateRotationMatrixTst(eMatrix, fMatrix, gMatrix);

        var mMatrixTst  = a9Instance.CreateMMatrixTst();
        var nMatrixTst  = a9Instance.CreateNMatrixTst();
        var pMatrixTst  = a9Instance.CreatePMatrixTst();
        var scaleMatrix = a9Instance.CalculateScaleMatrixTst(mMatrixTst, nMatrixTst, pMatrixTst);

        var aMatrix = a9Instance.CreateAMatrixTst(rotMatrix, scaleMatrix);

        var diagonalRot = Matrix <double> .Build.DenseDiagonal(3, 3, 1);

        var diagonalScale = Matrix <double> .Build.DenseDiagonal(3, 3, 1);

        var lVector = a9Instance.CreateLVectorTst(diagonalRot, diagonalScale);

        var dxVectorActual = a9Instance.CreateDxVectorTst(aMatrix, lVector);

        for (int row = 0; row < dxVectorActual.Count; row++)
        {
            Assert.Equal(dxVectorExpected[row], dxVectorActual[row], 8);
        }
    }
示例#2
0
    private void NineAffine_CreateAMatrix_ValidAMatrix()
    {
        FillListsCoordinationData(PathToTxt, out var srcSC, out var dstSC);
        var aMatrixExpected = ReadControlDataFromFile(PathToTxt + "\\aMatrix.txt", 30, 9);
        var a9Instance      = new NineAffine(srcSC, dstSC);

        var eMatrix   = a9Instance.CreateEMatrixTst();
        var fMatrix   = a9Instance.CreateFMatrixTst();
        var gMatrix   = a9Instance.CreateGMatrixTst();
        var rotMatrix = a9Instance.CalculateRotationMatrixTst(eMatrix, fMatrix, gMatrix);

        var mMatrixTst  = a9Instance.CreateMMatrixTst();
        var nMatrixTst  = a9Instance.CreateNMatrixTst();
        var pMatrixTst  = a9Instance.CreatePMatrixTst();
        var scaleMatrix = a9Instance.CalculateScaleMatrixTst(mMatrixTst, nMatrixTst, pMatrixTst);

        var aMatrixActual = a9Instance.CreateAMatrixTst(rotMatrix, scaleMatrix);

        for (int row = 0; row < aMatrixActual.RowCount; row++)
        {
            for (int col = 0; col < aMatrixExpected.ColumnCount; col++)
            {
                Assert.Equal(aMatrixExpected[row, col], aMatrixActual[row, col], 3);
            }
        }
    }
示例#3
0
        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);
        }
示例#4
0
    private void NineAffine_FormingMMatrix_ValidMMatrix()
    {
        FillListsCoordinationData(PathToTxt, out var srcSC, out var dstSC);
        var             mMatrixExpected = ReadControlDataFromFile(PathToTxt + "\\mMatrix.txt", 3, 3);
        var             a9Instance      = new NineAffine(srcSC, dstSC);
        Matrix <double> mMatrixActual   = a9Instance.CreateMMatrixTst();

        for (int row = 0; row < mMatrixActual.RowCount; row++)
        {
            for (int col = 0; col < mMatrixExpected.ColumnCount; col++)
            {
                Assert.Equal(mMatrixExpected[row, col], mMatrixActual[row, col], 8);
            }
        }
    }
示例#5
0
    private void NineAffine_CreateLMatrix_ValidLMatrix()
    {
        FillListsCoordinationData(PathToTxt, out var srcSC, out var dstSC);
        var lVectorExpected = ReadControlDataFromFile(PathToTxt + "\\lVector.txt", 30, 1).Column(0);
        var a9Instance      = new NineAffine(srcSC, dstSC);

        var rotMatrix = Matrix <double> .Build.DenseDiagonal(3, 3, 1);

        var scaleMatrix = Matrix <double> .Build.DenseDiagonal(3, 3, 1);

        var lVectorActual = a9Instance.CreateLVectorTst(rotMatrix, scaleMatrix);

        for (int row = 0; row < lVectorActual.Count; row++)
        {
            Assert.Equal(lVectorExpected[row], lVectorActual[row], 8);
        }
    }
示例#6
0
    private void NineAffine_CalculateScaleMatrix_ValidScaleMatrix()
    {
        FillListsCoordinationData(PathToTxt, out var srcSC, out var dstSC);
        var             scaleMatrixExpected = ReadControlDataFromFile(PathToTxt + "\\baseScaleMatrix.txt", 3, 3);
        var             a9Instance          = new NineAffine(srcSC, dstSC);
        var             mMatrixTst          = a9Instance.CreateMMatrixTst();
        var             nMatrixTst          = a9Instance.CreateNMatrixTst();
        var             pMatrixTst          = a9Instance.CreatePMatrixTst();
        Matrix <double> rotMatrixActual     = a9Instance.CalculateScaleMatrixTst(mMatrixTst, nMatrixTst, pMatrixTst);

        for (int row = 0; row < rotMatrixActual.RowCount; row++)
        {
            for (int col = 0; col < scaleMatrixExpected.ColumnCount; col++)
            {
                Assert.Equal(scaleMatrixExpected[row, col], rotMatrixActual[row, col], 4);
            }
        }
    }
示例#7
0
    private void NineAffine_CalculateRotationMatrix_ValidRotationMatrix()
    {
        FillListsCoordinationData(PathToTxt, out var srcSC, out var dstSC);
        var rotMatrixExpected = ReadControlDataFromFile(PathToTxt + "\\baseRotMatrix.txt", 3, 3);
        var a9Instance        = new NineAffine(srcSC, dstSC);

        var             eMatrix         = a9Instance.CreateEMatrixTst();
        var             fMatrix         = a9Instance.CreateFMatrixTst();
        var             gMatrix         = a9Instance.CreateGMatrixTst();
        Matrix <double> rotMatrixActual = a9Instance.CalculateRotationMatrixTst(eMatrix, fMatrix, gMatrix);

        for (int row = 0; row < rotMatrixActual.RowCount; row++)
        {
            for (int col = 0; col < rotMatrixExpected.ColumnCount; col++)
            {
                Assert.Equal(rotMatrixExpected[row, col], rotMatrixActual[row, col], 5);
            }
        }
    }
示例#8
0
    private void NineAffine_Iteration_ValidIteration()
    {
        FillListsCoordinationData(PathToTxt, out var srcSC, out var dstSC);
        var a9Instance = new NineAffine(srcSC, dstSC);

        _testOutputHelper.WriteLine("DC\n");
        foreach (var t in a9Instance.DeltaCoordinateMatrix.Vector)
        {
            _testOutputHelper.WriteLine(t.ToString());
        }
        _testOutputHelper.WriteLine("rot\n");
        for (int row = 0; row < a9Instance.RotationMatrix.Matrix.RowCount; row++)
        {
            for (int col = 0; col < a9Instance.RotationMatrix.Matrix.ColumnCount; col++)
            {
                _testOutputHelper.WriteLine(a9Instance.RotationMatrix.Matrix[row, col].ToString());
            }
        }
        _testOutputHelper.WriteLine("scale\n");
        _testOutputHelper.WriteLine(a9Instance.M.ToString());
    }