Объединить две матрицы

298
11 февраля 2018, 00:02

Есть две матрицы:

int[][] one = {{ 1, 1, 1 },
               { 0, 0, 0 }, 
               { 0, 0, 0 }};
int[][] two = {{ 0, 0, 1 },
               { 0, 1, 0 }, 
               { 1, 0, 0 }};

Нужно их объединить, сместив вторую относительно первой на offset:

merge(int[][] one, int[][] two, Point offset)

Например, offset = new Point(2,-2);

Результат:

int[][] result = {{0,0,0,0,1},
                  {0,0,0,1,0},
                  {1,1,1,0,0},
                  {0,0,0,0,0},
                  {0,0,0,0,0}}

Матрицы могут быть разной размерности, смещение отрицательным.
Пока смог реализовать только объединение матриц разной размерности, без смещения:

public int[][] merge( int[][] one, int[][] two, Point offset ) {
    int[][] merged = getEmptyMergedMatrix( one, two, offset  );
    addToMatrix( matrix, one, offset  );
    addToMatrix( matrix, two, offset );
    return merged;
}
private int[][] getEmptyMergedMatrix( int[][] one, int[][] two, Point offset ) {
    int height = Math.max( one.length, two.length );
    //int height = Math.max( one.length, two.height + Math.abs( offset.y ) );
    int width = Math.max( one[0].length, two[0].length );
   // int width = Math.max( one[0].length, two[0].length + Math.abs( offset.x );
    return new int[][]( height, width );
}
private void addToMatrix( int[][] dest, int[][] src, Point offset ) {
    int srcHeight = src.length;
    int srcWidth = src[ 0 ].length;
    for ( int y = 0; y < srcHeight; y++ ) {
        for ( int x = 0; x < srcWidth; x++ ) {
            if ( src[ y ][ x ] == 1 ) dest[ y ][ x ] = 1;
        }
    }
}

Если раскомментировать строки в 3-ем методе - получается матрица правильного размера для любых смещений. Но не могу сообразить, как скопировать значения со смещенной матрицы. Есть какие-нибудь идеи?

READ ALSO
java android Ошибка null array

java android Ошибка null array

не запускается apk, пишит ошибку

243
Activity не видит TextView в фрагменте

Activity не видит TextView в фрагменте

На главном экране есть FrameLayout, где, в зависимости от выбранного пункта меню, меняются фрагменты (экраны)

178
Адаптируемый размер текста у Control JavaFX

Адаптируемый размер текста у Control JavaFX

Собственно уже n-ый день мучаюсь с размером шрифтаВот ситуация: на обычный AnchorPane добавил обычную кнопку и поставил все якори по 30

190
Фон с помощью jlabel закрывает все кнопки

Фон с помощью jlabel закрывает все кнопки

Когда ставлю фон с помощью jlabel, все кнопки и поля становятся под фономКак это исправить можно?

156