Преобразование координат подмассива в координаты массива - PullRequest
0 голосов
/ 06 мая 2010

Я знаю координаты центра (x, y) подмассива в терминах пространства подмассива и общего массива. Для других частей подмассива я также знаю координаты в пространстве подмассива - но я хочу найти координаты в общем массиве? Есть ли элегантный способ сделать это в MATLAB? В принципе, я думаю, вы все равно сможете найти, где он будет находиться в пространстве массива.

Например, например, (32,18) - это координаты (x, y) элемента. Тогда у вас есть небольшой подмассив 8x8, который включает в себя тот же элемент. Допустим, координаты для того же элемента в пространстве подмассива (3,5). Каковы будут координаты в большем массиве для чего-то, например, (6.2,7.1) в подмассиве?

Ответы [ 2 ]

0 голосов
/ 07 мая 2010

Если у вас есть массив m-by-n A, и вы отображаете координатную точку (x1, y1) в центр элемента A(1,1) и координатную точку (x2, y2) в центр элемента A(m,n), тогда вот общий способ найти значение индекса элемента массива, центр которого ближе всего к данному значению координаты (x3, y3):

sizeA = size(A);  %# The row and column sizes of A
p1 = [x1 y1];     %# Point for A(1,1)
p2 = [x2 y2];     %# Point for A(m,n)
p3 = [x3 y3];     %# Point to find indices for

indices = round((sizeA-1).*(p3-p1)./(p2-p1))+1;  %# Get the raw indices
indices = min(max(indices,[1 1]),sizeA);  %# Limit the indices to the array size
0 голосов
/ 06 мая 2010

Следуя вашему примеру, давайте возьмем массив размером 100x100 и используем элемент (32,18) в качестве нашей точки интереса.В MATLAB вы можете использовать оператор двоеточия для доступа к подмассивам.

array=rand(100);
x=32;
y=18;
subdim=8;
subx=3;
suby=5;

Давайте построим подмассив из 64 элементов с вашей точкой (3,5).

subarray=array(x-(subx-1):x+(subdim-subx),y-(suby-1):y+(subdim-suby));

Как вытеперь можно видеть subarray(3,5)==array(x,y);

Итак, если вы хотите найти исходные индексы массива для элемента подмассива (6,7):

X=x-subx+6;
Y=y-suby+7;

, что дает

array(X,Y)==subarray(6,7);

Или, если вы просто хотите найти, где элемент (6,7) подмассива находится в исходном массиве, вы можете использовать функцию find.(Осторожно, если у вас есть дубликаты элементов в массиве, он найдет их все.)

[x,y]=find(array==subarray(6,7));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...