2010-05-06 8 views
0

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

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

+0

Можете привести конкретный пример? Я не понимаю вопроса. – MatlabDoug

+0

@ user111: Посмотрите на эти комментарии и налево. Должно быть небольшое слово «edit», которое вы можете щелкнуть, чтобы отредактировать сообщение. Пожалуйста, сделайте это, а не отправляйте ответы. – gnovice

+0

Если вы не видите ссылку «изменить» в вопросе, возможно, это связано с тем, что у вас есть 3 разных аккаунта (http://stackoverflow.com/users). Попробуйте получить идентификатор OpenID и объедините эти учетные записи, чтобы вы могли отредактировать свой вопрос, чтобы добавить дополнительную информацию вместо отправки ответов. – gnovice

ответ

0

Следуя вашему примеру, давайте возьмем массив из 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));

0

Если у вас есть м-на-п массив 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 
Смежные вопросы