Как я понимаю, у вас есть 4 группы по 3х3 = 9 координатных пар. Вам нужно нарисовать одну пару из каждой группы как один результат и получить все возможные такие результаты.
Таким образом, сокращая каждую из групп из 9 пар координат до таблицы поиска, индексированной с номером от 1 9, ваша проблема может быть сведена к рисованию с заменой 4 значений из набора 1:9
.
Все такие комбинации довольно легко получить. permn
- это одна функция, которая делает это (из File Exchange ). Но вы можете сделать это еще проще, используя ndgrid
:
ind = 1:9;
[a1,a2,a3,a4] = ndgrid(ind,ind,ind,ind);
ind = [a1(:),a2(:),a3(:),a4(:)];
Каждая строка в ind
- это индексы в одной из ваших сеток 3x3.
Например, если сетка 1 is:
x1 = [0.5,0.7,0.8];
y1 = [4.2,5.7,7.1];
, тогда вы можете сгенерировать пары координат следующим образом:
[x1,y1] = meshgrid(x1,y1); % meshgrid is nearly the same as ndgrid...
xy1 = [x1(:),y1(:)];
Теперь ваша комбинация k
равна:
k = 563;
[xy1(ind(k,1),:), xy2(ind(k,2),:), xy3(ind(k,3),:), xy4(ind(k,4),:)]
Вы, вероятно, захотите реализовать вышеизложенное с использованием многомерных массивов, а не x1
, x2
, x3
, et c. Добавление индексов к переменным приводит к запутанному коду, который трудно расширить. Например, для n
групп вы можете написать:
n = 4;
ind = 1:9;
ind = repmat({ind},n,1);
[ind{:}] = ndgrid(ind{:});
ind = cellfun(@(m)reshape(m,[],1), ind, 'UniformOutput',false);
ind = [ind{:}]; % ind is now the same as in the block of code above
et c.