Insert Matrix into Matrix and don't care if some of the numbers fall off the edge

1 view (last 30 days)
I'm trying to make a little game. I have a 2 part question. How can I insert a matrix in a matrix where I do not care if the some of the inserted matrix falls outside the matrix I am inserting it into. Except, I don't want the center of the inserted matrix to be lost,
Thank you
Andrew
example
A= 1 1 1
1 2 1
1 1 1
B= 0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
B into A at (4,5) (coordinates based on center of A)
Result = 0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 1 1 1
0 0 0 1 2 1
  1 Comment
Walter Roberson
Walter Roberson on 12 Aug 2021
What should happen in the case where the center of the inserted matrix would get lost?
I do not see you inserting B into A; I see you inserting A into B ?

Sign in to comment.

Answers (1)

the cyclist
the cyclist on 12 Aug 2021
Probably not the most efficient, but I believe this does what you want:
% Arrays
A= [1 1 1
1 2 1
1 1 1];
B= [0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
];
% Where to center
ci = 4;
cj = 5;
% Get sizes
[mA, nA] = size(A);
[mB, nB] = size(B);
% Calculate necessary "padding" around B, which will be trimmed later
pad = (mA-1)/2;
% Initialize output as padded size
output = nan(mB+2*pad,nB+2*pad);
% Insert B into padded array
output(pad+1:end-pad,pad+1:end-pad) = B;
% Insert A into padded array, at specified coordinates
output(ci:ci+mA-1,cj:cj+nA-1) = A;
% Remove the padding (and extraneous elements of A)
output = output(pad+1:end-pad,pad+1:end-pad)
output = 4×6
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 2 1

Categories

Find more on Graphics Object Programming in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!