How to create the contour (closed surface) utilizing matlab functions or loopings using the given Matrix under certain conditions

조회 수: 2 (최근 30일)
Question_linear_interpolation.png
  댓글 수: 6
M.S. Khan
M.S. Khan 2019년 8월 15일
i want to generate a closed surface just like a circular surface. i want to create boundary for that surface by filling 3s on the boundary.
let me make it more clear. From the below matrix, there is an ouline which is not closed, i want to close it by fillings 3s.M
[ 0 0 0 3 3 0 0 0
0 0 3 0 0 0 3 0
0 3 0 0 0 0 3 0
3 0 0 0 0 0 0 3
3 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
0 3 0 0 0 0 3 0
0 0 0 0 0 0 3 0
0 0 0 0 0 0 0 0
0 0 3 3 0 0 0 0 ]
if you see it, its some circular closed shape. i want to maintain the shape by filling the missing values of 3s in rows and columns so that i can get the interior of the shape.
Thanks and regards for advance for all help and cooperation.

댓글을 달려면 로그인하십시오.

답변 (1개)

Dheeraj Singh
Dheeraj Singh 2019년 8월 19일
I understand that you want to fill the matrix such that the boundaries are filled circularly.
And for starting 3, it should be before the middle row or column and vice-versa for the closing.
So, for say matrix:
[ 0 0 0 3 3 0 0 0
0 0 3 0 0 0 3 0
0 3 0 0 0 0 3 0
3 0 0 0 0 0 0 3
3 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
0 3 0 0 0 0 3 0
0 0 0 0 0 0 3 0
0 0 0 0 0 0 0 0
0 0 3 3 0 0 0 0 ]
You would like the output to be something like this:
[ 0 0 0 3 3 0 0 0
0 0 3 0 0 3 3 0
0 3 0 0 0 0 3 0
3 0 0 0 0 0 0 3
3 0 0 0 0 0 0 3
3 0 0 0 0 0 0 3
0 3 0 0 0 0 3 0
0 3 0 0 0 0 3 0
0 3 0 0 0 0 3 0
0 0 3 3 3 3 0 0]
You can do it by dividing the whole matrix into 4 quadrants similar to the circle.
The following code below implements it for when the number of columns is greater than number of rows.
%your matrix
a=zeros(8,10);
N=a(1,:);
M=a(:,1);
m1=N/2;
e1=m1+1;
m2=M/2;
e2=m2+1;
%for first quadrant;
j=1;
for i=m2:-1:1
if a(j,i)~=3
a(j,i)=3;
end
j=j+1;
j=min([j,m1]);
end
%for 2nd quadrant
j=e1;
for i=1:m2
if a(j,i)~=3
a(j,i)=3;
end
j=j+1;
j=min([j,N]);
end
%for 3rd quadrant
j=N;
for i=e2:M
if a(j,i)~=3
a(j,i)=3;
end
j=j-1;
j=max([j,e1]);
end
%for 4th quadrant
j=m1;
for i=M:-1:e2
if a(j,i)~=3
a(j,i)=3;
end
j=j-1;
j=max([j,1]);
end
You can the modify the above code for the case where no of rows are more than columns.

카테고리

Help CenterFile Exchange에서 Language Support에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by