Как добавить новые результаты в существующий массив ячеек?
Предположим, что у меня есть выход ("myArray"), который представляет собой массив ячеек 1x4, а также цикл while, в котором я вызываю функцию, которая производит новый результат того же размера и переменной, что и мой исходный массив.
Как добавить новый результат в существующий, чтобы у меня все еще был массив 1х4 с новыми результатами, обновленными в существующие ячейки?
См. пример кода ниже:
% image SegI = [2 2 2 0 0 2 2 2 0 0 1 1 2 0 0 1 1 1 1 0 1 1 1 1 1]; figure, imshow(SegI, [], 'InitialMagnification','fit') grid on; % face vectors obtained from each internal node in the image; such that edge %directions of 1|2 are denoted as 'm', and 0|2 as 'n', and others as NaN % i made the 'b' up just for the purpose of detecting the output easily allfaces = {NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; 'm',NaN,'m',NaN; NaN,NaN,NaN,NaN; NaN,NaN,'n','n'; NaN,'n',NaN,'n'; NaN,'m',NaN,NaN; NaN,NaN,NaN,'m'; NaN,NaN,NaN,NaN; NaN,'m','b',NaN; 'm',NaN,NaN,'n'; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN}; % find point vertices... which are nodes that contain pixel edges of both 1|2 and %0|2 Pvertex = find( any(strcmp('m', allfaces),2) & any(strcmp('n', allfaces),2) ); % create storage cell array as well as initialize Pvertex to inodej myArray = cell(numel(Pvertex), 4); inodej = Pvertex; cp = [3,3]; %coordinates of Pvertex for k = 1: numel(Pvertex) %loop through all Pvertices % find next node from Pvertex [myArray, allfaces, inodej, ynode, xnode, dist_node] = Obtain_nodes(k, cp, inodej, myArray, allfaces); while dist_node < sqrt(2) % find nodes until exit loop [myArray, allfaces, inodej, ynode, xnode, dist_node] = Obtain_nodes(k, cp, inodej, myArray, allfaces); end end
Функция задается следующим образом:
function [myArray, allfaces, inodej, ynode, xnode, dist_node] = Obtain_nodes(k, cp, inodej, myArray, allfaces) % This function computes new nodes from previous ones, as well as % store each results in the storage cell "myArray" if ( find( strcmp('m', allfaces(inodej(k),:)) ) == 1 ) == true % Find the node at the northern end of the face after inodej inodej(k,:) = inodej(k,:) - 1; % extract the n, s, e, w faces from allfaces a = allfaces(inodej(k),:); % store the new results (exclude the existing result at the southern face) a(1) = {NaN}; myArray(k,:) = a; % Obtain a new allfaces that deals the South face for the current node allfaces(inodej(k),:) = a; elseif ( find( strcmp('m', allfaces(inodej(k),:)) ) == 2 ) == true % Find the node at the southern end of the face after inodej inodej(k,:) = inodej(k,:) - 4; % extract n, s, e, w faces from allfaces a = allfaces(inodej(k),:); % store the new results (exclude the node at the northern face) a(2) = {NaN}; myArray(k,:) = a; % Obtain a new allfaces that deals the North face for the current node allfaces(inodej(k),:) = a; end
Первый вызов функции в цикл for возвращается:
inodej = 10, и
myArray = {NaN, 'm', 'b', NaN}
Вызов функции внутри цикл while возвращается:
inodej = 6, который рисует результат из 6-го ряда всех лиц, чтобы дать:
myArray = {NaN, NaN, NaN, 'n'}
Однако я не вижу своего первоначального (1-го) результата после цикл while завершается, потому что новый(2-й) результат обновляет массив ячеек. Следовательно, проблема для меня заключается в том, как получить любые новые результаты, сохраненные и обновленные с предыдущими в качестве цикл while выполняемый.
Я ожидал бы, что мой окончательный результат будет в такой форме:
[{NaN, NaN}] [{'m', NaN}] [{'b', NaN}] [{NaN, 'n'}]
[^]
Пожалуйста также имейте в виду что я мог бы например увеличить расстояние поиска (dist_node) в этом случае я не знал бы заранее (за исключением визуального осмотра), сколько новых результатов я мог бы получить. Таким образом, код должен иметь возможность добавлять как можно больше новых результатов.
Пожалуйста, мне нужна любая помощь/предложения/советы, чтобы пройти через это. Заранее спасибо.
Что я уже пробовал:
Я добавил пример кода в описание.