Есть две матрицы:
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-ем методе - получается матрица правильного размера для любых смещений. Но не могу сообразить, как скопировать значения со смещенной матрицы. Есть какие-нибудь идеи?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости