Make a better code to check the neighbours of a cell in a matrix and replace a value
Afficher commentaires plus anciens
Hello, I want to ask for help to make my code better, or maybe simpler. My idea is to check the 8 neighbors of my cell isla(i,j)==2 and if one of them has the value 0, insert in that location the value 2, but only in the first one that the code finds.
My code is:
for i=3:len+2
for j=3:len+2
if isla(i,j)==2
if isla(i,j+1)==0 %espacio a la derecha vacio
isla(i,j+1)=2;
elseif isla(i,j-1)==0 %espacio a la izquierda vacio
isla(i,j-1)=2;
elseif isla(i+1,j)==0 %espacio de abajo vacio
isla(i+1,j)=2;
elseif isla(i-1,j)==0 %espacio de arriba vacio
isla(i-1,j)=2;
elseif isla(i-1,j-1)==0
isla(i-1,j-1)=2;
elseif isla(i-1,j+1)==0
isla(i-1,j+1)=2;
elseif isla(i+1,j+1)==0
isla(i+1,j+1)=2;
elseif isla(i+1,j-1)==0
isla(i+1,j-1)=2;
end
end
end
end
end
Hope you can see the problem is that the code isn't simple. I wish I could use fewer lines to don't have to modify the entire code every time when I have to change the conditions. I hope someone can help me. I apologize if I misspelled a word, English isn't my native language. Greetings
Réponse acceptée
Plus de réponses (1)
Ahmet Cecen
le 19 Mai 2013
0 votes
If I understand correctly from your comment at the previous answer here is a pseudo-code that can do this in a somewhat simpler manner:
ok=0
While ok=0
i= a random number within the bounds of your index (use matlab help to find the function rand)
j= another random number
if isla(i,j)==0 && ( isla(i+1,j)==2 isla(i-1,j)==2 isla(i,j+1)==2 isla(i,j-1)==2 ) %Put as many neighbors within the OR logic as you want.
isla(i,j)=2;
ok=1;
endif
end
1 commentaire
Ahmet Cecen
le 19 Mai 2013
Hmm the ORs didnt show up on the text.
It is supposed to be:
if isla(i,j)==0 AND ( isla(i+1,j)==2 OR isla(i-1,j)==2 OR isla(i,j+1)==2 OR isla(i,j-1)==2 )
Catégories
En savoir plus sur Correlation and Convolution dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!