in = inpolygon(xq,yq,xv,yv) returns in indicating
if the query points specified by xq and yq are
inside or on the edge of the polygon area defined by xv and yv.

Define a pentagon and a set of points. Then, determine which points lie inside (or on the edge) of the pentagon.

Define the x and y coordinates of polygon vertices to create a pentagon.

L = linspace(0,2.*pi,6);
xv = cos(L)';
yv = sin(L)';

Define x and y coordinates of 250 random query points. Initialize the random-number generator to make the output of randn repeatable.

rng default
xq = randn(250,1);
yq = randn(250,1);

Determine whether each point lies inside or on the edge of the polygon area. Also determine whether any of the points lie on the edge of the polygon area.

[in,on] = inpolygon(xq,yq,xv,yv);

Determine the number of points lying inside or on the edge of the polygon area.

numel(xq(in))

ans =
80

Determine the number of points lying on the edge of the polygon area.

numel(xq(on))

ans =
0

Since there are no points lying on the edge of the polygon area, all 80 points identified by xq(in), yq(in) are strictly inside the polygon area.

Determine the number of points lying outside the polygon area (not inside or on the edge).

numel(xq(~in))

ans =
170

Plot the polygon and the query points. Display the points inside the polygon with a red plus. Display the points outside the polygon with a blue circle.

figure
plot(xv,yv) % polygon
axis equal
hold on
plot(xq(in),yq(in),'r+') % points inside
plot(xq(~in),yq(~in),'bo') % points outside
hold off

Find the points inside a square with a square hole.

Define a square region with a square hole. Specify the vertices of the outer loop in a counterclockwise direction, and specify the vertices for the inner loop in a clockwise direction. Use NaN to separate the coordinates for the outer and inner loops.

xv = [1 4 4 1 1 NaN 2 2 3 3 2];
yv = [1 1 4 4 1 NaN 2 3 3 2 2];

Define x and y coordinates of 500 random points. Initialize the random-number generator to make the output of randn repeatable.

Determine whether each point lies inside or on the edge of the polygon area.

in = inpolygon(xq,yq,xv,yv);

Plot the polygon and the query points. Display the points inside the polygon with a red plus. Display the points outside the polygon with a blue circle.

figure
plot(xv,yv,'LineWidth',2) % polygon
axis equal
hold on
plot(xq(in),yq(in),'r+') % points inside
plot(xq(~in),yq(~in),'bo') % points outside
hold off

Query points in the square hole are outside the polygon.

Determine whether each point lies inside or on the edge of the polygon area. Also determine whether any of the points lie on the edge of the polygon area.

[in,on] = inpolygon(xq,yq,xv,yv);

Determine the number of points lying inside or on the edge of the polygon area.

numel(xq(in))

ans =
8

Determine the number of points lying on the edge of the polygon area.

numel(xq(on))

ans =
2

Determine the number of points lying outside the polygon area (not inside or on the edge).

numel(xq(~in))

ans =
4

Plot the polygon and the points. Display the points strictly inside the polygon with a red plus. Display the points on the edge with a black asterisk. Display the points outside the polygon with a blue circle.

figure
plot(xv,yv) % polygon
hold on
plot(xq(in&~on),yq(in&~on),'r+') % points strictly inside
plot(xq(on),yq(on),'k*') % points on edge
plot(xq(~in),yq(~in),'bo') % points outside
hold off

Six points lie inside the polygon. Two points lie on the edge of the polygon. Four points lie outside the polygon.

x-coordinates of polygon vertices, specified as a vector.

The size of xv must match the size of yv.

To specify vertices of multiply connected or disjoint polygons,
separate the coordinates for distinct loops with NaN.
Additionally for multiply connected polygons, you must orient the
vertices for external and internal loops in opposite directions.

The polygon cannot be self-intersecting and multiply connected
due to the ambiguity associated with self-intersections and loop orientations.

y-coordinates of polygon vertices, specified as a vector.

The size of yv must match the size of xv.

To specify vertices of multiply connected or disjoint polygons,
separate the coordinates for distinct loops with NaN.
Additionally for multiply connected polygons, you must orient the
vertices for external and internal loops in opposite directions.

The polygon cannot be self-intersecting and multiply connected
due to the ambiguity associated with self-intersections and loop orientations.