Двумерный индекс
Inheritance: IIndex
Example #1
0
        /// <summary>
        /// Двумерная сплошная матрица
        /// </summary>
        /// <param name="matrix">Копируемая матрица</param>
        public DenseMatrix(IMatrix <T> matrix)
            : this(matrix.Size(0), matrix.Size(1))
        {
            var index = new Index2D();

            for (index.I = 0; index.I < m; index.I++)
            {
                for (index.J = 0; index.J < n; index.J++)
                {
                    this[index.I, index.J] = matrix[index];
                }
            }
        }
 protected override void SetBitmap()
 {
     var index = new Index2D();
     for (index.J = 0; index.J < sizeOfMatrix.Width; index.J++)
         for (index.I = 0; index.I < sizeOfMatrix.Height; index.I++)
         {
             int value =
                 matrix[index] > MinTrackBar.Maximum ?
                 (matrix[index] - (MaxTrackBar.Maximum - MaxTrackBar.Value)) :
                 (matrix[index] + (MinTrackBar.Value - MinTrackBar.Minimum));
             matrixBitmap.SetPixel(
                 index.J, index.I,
                 Color.FromArgb(255, (int)(coefficient * value), trackBarColor.green, trackBarColor.blue));
         }
 }
        /// <summary>
        /// Индексы указанного столбца матрицы
        /// </summary>
        /// <param name="matrix">Матрица</param>
        /// <param name="column">Номер столбца</param>
        /// <returns>Перечисление индексов столбца матрицы</returns>
        /// <typeparam name="T">Тип хранимых в матрице данных</typeparam>
        public static IEnumerable <IIndex> ColumnIndexes <T>(IMatrix <T> matrix, int column)
        {
            if (matrix.Dimensions != 2)
            {
                throw new Exception("Размерность матрицы должна быть равна 2");
            }

            int m = matrix.Size(0);

            var index = new Index2D(-1, column);

            for (index.I = 0; index.I < m; index.I++)
            {
                yield return(index);
            }
        }
        /// <summary>
        /// Индексы указанной строки матрицы
        /// </summary>
        /// <param name="matrix">Матрица</param>
        /// <param name="row">Номер строки</param>
        /// <returns>Перечисление индексов строки матрицы</returns>
        /// <typeparam name="T">Тип хранимых в матрице данных</typeparam>
        public static IEnumerable <IIndex> RowIndexes <T>(IMatrix <T> matrix, int row)
        {
            if (matrix.Dimensions != 2)
            {
                throw new Exception("Размерность матрицы должна быть равна 2");
            }

            int n = matrix.Size(1);

            var index = new Index2D(row, -1);

            for (index.J = 0; index.J < n; index.J++)
            {
                yield return(index);
            }
        }
        protected override void SetBitmap()
        {
            for (int i = 0; i < solutionSizeColumn; i++) //строка разбитой матрицы
            {
                var lastOnI = splittedMatrix.CellHigh(i, 0);

                var index = new Index2D();
                //строка исходной матрицы, попавшая в строку разбитой матрицы
                for (index.I = splittedMatrix.CellLow(i, 0); index.I <= lastOnI; index.I++)
                    for (int j = 0; j < solutionSizeRow; j++) //столбец разбитой матрицы
                    {
                        var lastOnJ = splittedMatrix.CellHigh(j, 1);

                        //строка исходной матрицы, попавшая в столбец разбитой матрицы
                        for (index.J = splittedMatrix.CellLow(j, 1); index.J <= lastOnJ; index.J++)
                        {
                            SetPixelToBitmapOfMatrix(
                                (int)(coefficient * GetValueOfMatrixFrom(matrix[index])),
                                index.I + i * zoomShift,
                                index.J + j * zoomShift);
                        }
                    }
            }
        }
 private void InitSumInBlocks()
 {
     var index = new Index2D();
     sumOfSplittedElements = new int[solutionSizeColumn][];
     for (int i = 0; i < solutionSizeColumn; i++)
     {
         sumOfSplittedElements[i] = new int[solutionSizeRow];
         var lastOnI = splittedMatrix.CellHigh(i, 0);
         for (index.I= splittedMatrix.CellLow(i, 0); index.I <= lastOnI; index.I++)
             for (int j = 0; j < solutionSizeRow; j++) //столбец разбитой матрицы
             {
                 var lastOnJ = splittedMatrix.CellHigh(j, 1);
                 for (index.J = splittedMatrix.CellLow(j, 1); index.J <= lastOnJ; index.J++)
                     sumOfSplittedElements[i][j] += matrix[index];
             }
     }
 }