Чтобы начать с случая, когда вы находитесь внутри A, вместо того, чтобы давать d=0
и data_point=5
, вы должны дать data_point=[2,2]
.Если вам дано значение 5
, вы можете преобразовать
ij = [ceil(data_point/size(A,1)), rem(data_point-1, size(A,1))+1]
или использовать поиск, как в ответе Хай, в зависимости от того, как интерпретировать ваш вопрос.
Следующая функция
function B = find_neigh(A,ij,d)
imin = max(ij(1)-d,1);
imax = min(ij(1)+d,size(A,1));
jmin = max(ij(2)-d,1);
jmax = min(ij(2)+d,size(A,2));
B = zeros(2*d+1,2*d+1);
r1 = max(2-ij(1)+d,1);
c1 = max(2-ij(2)+d,1);
B(r1:r1+imax-imin, c1:c1+jmax-jmin) = A(imin:imax,jmin:jmax);
должен вернуть вам желаемый результат.Назовите его, например, с помощью
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
find_neigh(A,[1,2],1)
Редактировать: исправлено два, нет трех ошибок, и сделано это функцией