Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

inpolygon

位于多边形区域边缘内部或边缘上的点

说明

示例

in = inpolygon(xq,yq,xv,yv) 返回 in,以指明 xqyq 所指定的查询点是在 xvyv 定义的多边形区域的边缘内部还是在边缘上。

示例

[in,on] = inpolygon(xq,yq,xv,yv) 还返回 on 以指明查询点是否位于多边形区域的边缘。

示例

全部折叠

定义一个五边形和一个点集。然后,确定哪些点位于五边形的内部(或边缘上)。

定义多边形顶点的 x 和 y 坐标以创建五角形。

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

定义 250 个随机查询点的 x 和 y 坐标。初始化随机数生成器以使 randn 的输出可重复。

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

确定每个点是位于多边形区域边缘内部还是边缘上。还确定任何点是否位于多边形区域的边缘。

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

确定位于多边形区域边缘内部或边缘上的点数。

numel(xq(in))
ans = 80

确定位于多边形区域边缘上的点数。

numel(xq(on))
ans = 0

由于多边形区域边缘上没有点,因此用 xq(in), yq(in) 标识的所有 80 个点完全位于多边形区域内部。

确定位于多边形区域外部的点数(不在边缘内部或边缘上)。

numel(xq(~in))
ans = 170

绘制多边形和查询点。显示多边形内部的点时带有一个红色加号。显示多边形外部的点时带有一个蓝色圆形。

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

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers

查找带有方孔的方形内的点。

定义一个带有方孔的方形区域。按逆时针方向指定外循环的顶点,并按顺时针方向指定内循环的顶点。使用 NaN 隔开外循环和内循环的坐标。

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

定义 500 个随机点的 x 和 y 坐标。初始化随机数生成器以使 randn 的输出可重复。

rng default
xq = rand(500,1)*5;
yq = rand(500,1)*5;

确定每个点是位于多边形区域边缘内部还是边缘上。

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

绘制多边形和查询点。显示多边形内部的点时带有一个红色加号。显示多边形外部的点时带有一个蓝色圆形。

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

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers

方孔内的查询点在多边形外部。

定义五角形的 x 和 y 坐标。

xv = [0.5;0.2;1.0;0;0.8;0.5];
yv = [1.0;0.1;0.7;0.7;0.1;1];

定义 12 个查询点的 x 和 y 坐标。

xq = [0.1;0.5;0.9;0.2;0.4;0.5;0.5;0.9;0.6;0.8;0.7;0.2];
yq = [0.4;0.6;0.9;0.7;0.3;0.8;0.2;0.4;0.4;0.6;0.2;0.6];

确定每个点是位于多边形区域边缘内部还是边缘上。还确定任何点是否位于多边形区域的边缘。

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

确定位于多边形区域边缘内部或边缘上的点数。

numel(xq(in))
ans = 8

确定位于多边形区域边缘上的点数。

numel(xq(on))
ans = 2

确定位于多边形区域外部的点数(不在边缘内部或边缘上)。

numel(xq(~in))
ans = 4

绘制多边形和点。显示完全在多边形内部的点时带有一个红色加号。显示边缘上的点时带有一个黑色星号。显示多边形外部的点时带有一个蓝色圆形。

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

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers

6 个点位于多边形内部。两个点位于多边形的边缘上。四个点位于多边形外部。

输入参数

全部折叠

查询点的 x 坐标,指定为标量、向量、矩阵或多维数组。

xq 的大小必须与 yq 的大小匹配。

数据类型: double | single

查询点的 y 坐标,指定为标量、向量、矩阵或多维数组。

yq 的大小必须与 xq 的大小匹配。

数据类型: double | single

多边形顶点的 x 坐标,指定为向量。

xv 的大小必须与 yv 的大小匹配。

要指定多连通或不相交的多边形的顶点,请通过 NaN 隔开不同循环的坐标。另外,对于多连通多边形,必须使外部和内部循环的顶点朝着相反的方向。

由于与自相交和循环方向相关的多义性,多边形不能自相交和多连通。

数据类型: double | single

多边形顶点的 y 坐标,指定为向量。

yv 的大小必须与 xv 的大小匹配。

要指定多连通或不相交的多边形的顶点,请通过 NaN 隔开不同循环的坐标。另外,对于多连通多边形,必须使外部和内部循环的顶点朝着相反的方向。

由于与自相交和循环方向相关的多义性,多边形不能自相交和多连通。

数据类型: double | single

输出参数

全部折叠

在多边形区域边缘内部或边缘上的点的指示符,以逻辑数组的形式返回。in 的大小与 xqyq 相同。

  • 逻辑值 1 (true) 用于指明相应的查询点是在多边形区域内部还是在多边形边界的边缘。

  • 逻辑值 0 (false) 用于指明相应的查询点是在多边形区域的外部。

因此,可以使用 in 创建指向 xqyq 的索引,以标识相关的查询点。

xq(in), yq(in)在多边形区域边缘内部或边缘上的查询点
xq(~in), yq(~in)在多边形区域外部的查询点

多边形区域边缘上的点的指示符,以逻辑数组的形式返回。on 的大小与 xqyq 相同。

  • 逻辑值 1 (true) 用于指明相应的查询点是在多边形边界上。

  • 逻辑值 0 (false) 用于指明相应的查询点是在多边形边界的内部还是外部。

因此,可以使用 onin 创建指向 xqyq 的索引,以标识相关的查询点。

xq(on), yq(on)在多边形边界上的查询点
xq(~on), yq(~on)位于多边形边界内部或外部的查询点
xq(in&~on), yq(in&~on)完全在多边形区域内部的查询点

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅