Function Reference
— Function File: [in, on] = inpolygon (x, y, xv, xy)

For a polygon defined by (xv, yv) points, determine if the points (x, y) are inside or outside the polygon. The variables x, y, must have the same dimension. The optional output on gives the points that are on the polygon.

Demonstration 1

The following code

  xv=[ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, \
       1.94545, 2.16477, 1.87639, 1.18218, 0.27615, \
       0.05840 ];
  yv=[ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, \
       0.18161, 0.78850, 1.13589, 1.33781, 1.04650, \
       0.60628 ];
 xa=[0:0.1:2.3];
 ya=[0:0.1:1.4];
 [x,y]=meshgrid(xa,ya);
 [IN,ON]=inpolygon(x,y,xv,yv);
 
 inside=IN & !ON;
 plot(xv,yv)
 hold on
 plot(x(inside),y(inside),"@g")
 plot(x(~IN),y(~IN),"@m")
 plot(x(ON),y(ON),"@b")
 hold off
 disp("Green points are inside polygon, magenta are outside,");
 disp("and blue are on boundary.");

Produces the following output

Green points are inside polygon, magenta are outside,
and blue are on boundary.

and the following figure

Demonstration 2

The following code

  xv=[ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, \
       1.94545, 2.16477, 1.87639, 1.18218, 0.27615, \
       0.05840, 0.73295, 1.28913, 1.74221, 1.16023, \
       0.73295, 0.05840 ];
  yv=[ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, \
       0.18161, 0.78850, 1.13589, 1.33781, 1.04650, \
       0.60628, 0.82096, 0.67155, 0.96114, 1.14833, \
       0.82096, 0.60628];
 xa=[0:0.1:2.3];
 ya=[0:0.1:1.4];
 [x,y]=meshgrid(xa,ya);
 [IN,ON]=inpolygon(x,y,xv,yv);
 
 inside=IN & ~ ON;
 plot(xv,yv)
 hold on
 plot(x(inside),y(inside),"@g")
 plot(x(~IN),y(~IN),"@m")
 plot(x(ON),y(ON),"@b")
 hold off
 disp("Green points are inside polygon, magenta are outside,");
 disp("and blue are on boundary.");

Produces the following output

Green points are inside polygon, magenta are outside,
and blue are on boundary.

and the following figure