Al momento non ho accesso a MatLab per verificare il codice che hai pubblicato (tra l'altro, la struttura "area_safe" non è definita, per cui, è impossibile eseguire il codice), tuttavia, ammesso che la parte iniziale del codice funzioni correttamente, c'è un errore concettuale nel primo loop:
cont=0;
for j=1:length(found)
if found(j)==1
mat(j,:)=[m(j,1) m(j,2)];
cont=cont+1;
end
end
In questo loop usi la variabile "j" per identificare la posizione nella quale salvare i valori della matrice "m" quando "found(j) == 1".
L'errore consiste nel fatto che j" viene incrementata ad ogni iterazione.
Se, ad esempio i primo tre elementi del vettore "found" sono "1 0 1" cosa succede?
[*] alla prima iterazione i valori di "m" vengono salvati correttamente in "mat"
[*] alla seconda iterazione, found(j) è "0" perciò i valori di "m" non vengono assegnati a "mat"
[*] alla terza iterazione, found(j) è 1 perciò i valori di "m" vengono assegnati a "m", sì, ma "dove"? Nella riga "j", visto che hai scritto: mat(j,:)=[m(j,1) m(j,2)]: e "j" vale "3" questo implica che la riga 2 conserva i valori "0" con i quali hai inizializzato la matrice stessa (la stessa cosa succederebbe anche se non inizializzassi la matrice "mat" perchè MatLab assignerebbe alla riga 2 i valori "0".
La soluzione è semplice: usa la variabile "cont" come indice per specificare in quale riga di "mat" inserire i valori della matrice "m":
cont=0;
for j=1:length(found)
if found(j)==1
% mat(j,:)=[m(j,1) m(j,2)];
cont=cont+1;
mat(cont,:)=[m(j,1) m(j,2)];
end
end