/// <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]; } } }