MATLAB Answers

Qingping
0

fill a polygon with a hole

Asked by Qingping
on 26 Feb 2014
Latest activity Answered by Steven Lord
on 19 Sep 2019
data=[
0.5, 0.8;
1.0, 0.0;
0.0, 0.0;
0.5, 0.8;
0.5, 0.4;
0.1, 0.1;
0.7, 0.1;
0.5, 0.4;
];
h=fill(data(:,1),data(:,2),'r')
the image is:
there is a line between dot(0.5,0.8) and (0.5,0.4) how to delete this line in prefectly? such as
I used the code set(h,'EdgeColor','r') to disappear this line.

  2 Comments

Azzi Abdelmalek
on 26 Feb 2014
What is the problem?
Qingping
on 28 Feb 2014
I want to delete the line between two triangle in automatic!

Sign in to comment.

3 Answers

lvn
Answer by lvn
on 28 Feb 2014
 Accepted Answer

Alternatively, you can remove all black lines (like that the figure looks good to me)
h=fill(data(:,1),data(:,2),'r','Linestyle','none')

  0 Comments

Sign in to comment.


Answer by Image Analyst
on 26 Feb 2014

Simply get rid of the last 5 rows of your data.
data=[
0.5, 0.8;
1.0, 0.0;
0.0, 0.0;
];
h=fill(data(:,1),data(:,2),'r')
That's so simple I guess I'm missing something, or you are.

  4 Comments

Show 1 older comment
Image Analyst
on 28 Feb 2014
You need to plot it as two separate objects, first a larger, outer red triangle, then a smaller inner white triangle:
outerTriangle = [
0.5, 0.8;
1.0, 0.0;
0.0, 0.0;
0.5, 0.8;
];
innerTriangle = [
0.5, 0.4;
0.1, 0.1;
0.7, 0.1;
0.5, 0.4;
];
h=fill(outerTriangle(:,1),outerTriangle(:,2),'r');
hold on;
h=fill(innerTriangle(:,1),innerTriangle(:,2),'w')
Qingping
on 3 Mar 2014
In this way, I want to confirm which one is outer object and which one is inner object.
Patrik Ek
on 3 Mar 2014
@Image Analyst: That was not expected, that matlab would not handle the case of polygons with holes, when plotting. I will remove my answer. I also did some research since it felt a bit incredulous that matlab could not do this. However the solution proposed by you were the most commonly recommended. +1 for that
@Qingping: Answer one is is of course the simplest one. However, to keep direction of the polygons you can check the direction or windiness or what you prefer to call it. The dierction should be opposite if the polygons are properly defined. Depending on standard the direction of the outer polygon may vary, but mathematics it is most often defined counter clockwise. However, MATLAB does in a number of occations define it the other way around (eg in mapping toolbox since this is more or less standard when working with maps)

Sign in to comment.


Steven Lord
Answer by Steven Lord
on 19 Sep 2019

Consider creating and plotting a polyshape. You will receive a warning but depending on how you've generated your data you may be able to avoid this.
data=[
0.5, 0.8;
1.0, 0.0;
0.0, 0.0;
0.5, 0.8;
0.5, 0.4;
0.1, 0.1;
0.7, 0.1;
0.5, 0.4;
];
p = polyshape(data);
plot(p)
Or, if you're building the outermost shape then subtracting away the inner holes:
outer=[
0.5, 0.8;
1.0, 0.0;
0.0, 0.0;
0.5, 0.8];
outerP = polyshape(outer);
hole = [
0.5, 0.4;
0.1, 0.1;
0.7, 0.1;
0.5, 0.4;
];
holeP = polyshape(hole);
totalP = subtract(outerP, holeP);
plot(totalP)

  0 Comments

Sign in to comment.