Вот моя интерпретация вашей проблемы: Учитывая некоторую периодическую c матрицу A
:
>> A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
и некоторый элемент x
(пример 1
), затем найдите (i, j ) индексы 4 соседей x
. В этом случае индексы (3, 4), (4,3), (4, 1), (1, 4) соответствуют 12, 15, 4, 13.
, поскольку я не знаю ваш вариант использования, я не знаю, в каком формате индексы наиболее удобны для вас. Но в качестве примера мы можем написать функцию neighbors
, которая возвращает структуру с 4 индексами элемента x
.
function out = neighbors(A, x)
[m, n] = size(A);
[i, j] = find(A == x);
mod2 = @(x) mod(x-1, [m, n])+1;
out.down = mod2([i+1, j ]);
out.up = mod2([i-1, j ]);
out.right = mod2([i , j+1]);
out.left = mod2([i , j-1]);
end
Затем мы можем запустить функцию следующим образом.
A = magic(4);
out = neighbors(A, 1);
A(out.left(1), out.left(2)); % this returns 15
A(out.right(1), out.right(2)); % this returns 4
A(out.up(1), out.up(2)); % this returns 12
A(out.down(1), out.down(2)); % this returns 13